From 87453d04d56906c3fbacdb649fc010e216ff9fe9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 18 Sep 2023 04:32:08 +0000 Subject: [PATCH] Rebuild pages at 5cdf6aae5355786194fb3afdf93e6e2d87e03c7d --- ChangruHenryQian_ip_master/authorship.json | 2 +- ChangruHenryQian_ip_master/commits.json | 2 +- Cikguseven_ip_master/commits.json | 2 +- PearlynnT_ip_master/authorship.json | 2 +- PearlynnT_ip_master/commits.json | 2 +- Propene-Dan_ip_master/authorship.json | 2 +- Propene-Dan_ip_master/commits.json | 2 +- TiwKangXu_ip_master/authorship.json | 2 +- TiwKangXu_ip_master/commits.json | 2 +- YeoBohShin_ip_master/authorship.json | 2 +- YeoBohShin_ip_master/commits.json | 2 +- applepiofmyeye_ip_master/authorship.json | 2 +- applepiofmyeye_ip_master/commits.json | 2 +- archive.zip | Bin 10917207 -> 10938970 bytes billieboy7_ip_master/authorship.json | 2 +- billieboy7_ip_master/commits.json | 2 +- chiayunrong_ip_master/authorship.json | 2 +- chiayunrong_ip_master/commits.json | 2 +- ji-just-ji_ip_master/authorship.json | 2 +- ji-just-ji_ip_master/commits.json | 2 +- keaganpzh_ip_master/authorship.json | 2 +- keaganpzh_ip_master/commits.json | 2 +- laurenlim2112_ip_master/commits.json | 2 +- nreHieW_ip_master/authorship.json | 2 +- nreHieW_ip_master/commits.json | 2 +- phiphi-tan_ip_master/authorship.json | 2 +- phiphi-tan_ip_master/commits.json | 2 +- ravern_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 13556 +++++++++---------- richiehx_ip_master/authorship.json | 2 +- richiehx_ip_master/commits.json | 2 +- ruiyangzh_ip_master/authorship.json | 2 +- ruiyangzh_ip_master/commits.json | 2 +- summary.json | 2 +- tllshan_ip_master/authorship.json | 2 +- tllshan_ip_master/commits.json | 2 +- victorlaiyeeteng_ip_master/authorship.json | 2 +- victorlaiyeeteng_ip_master/commits.json | 2 +- woojiahao_ip_master/authorship.json | 2 +- woojiahao_ip_master/commits.json | 2 +- yucongkoo_ip_master/authorship.json | 2 +- yucongkoo_ip_master/commits.json | 2 +- yyyaohhh_ip_master/authorship.json | 2 +- yyyaohhh_ip_master/commits.json | 2 +- zannloo_ip_master/authorship.json | 2 +- zannloo_ip_master/commits.json | 2 +- 46 files changed, 6822 insertions(+), 6822 deletions(-) diff --git a/ChangruHenryQian_ip_master/authorship.json b/ChangruHenryQian_ip_master/authorship.json index 6bfdff31..412051e7 100644 --- a/ChangruHenryQian_ip_master/authorship.json +++ b/ChangruHenryQian_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-15"},{"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":"ChangruHenryQian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"mainClassName \u003d \"duke.Launcher\"","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"-":38,"ChangruHenryQian":21}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"T | 0 | afd a","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"ChangruHenryQian":1}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates deadline which are Tasks with start and end.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" return \"D | \" + super.toTxt()","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":42}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns user dialog.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" * @param text The text of the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" * @param img The image of the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns chat bot dialog.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" * @param text The text of the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" * @param img The image of the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":72}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"public class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" public Duke() {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this(\"data/tasks.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage.load(), storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(new DukeException(\"Unable to find storage file.\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" * Runs the program.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.welcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" while (true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" String command \u003d userInput.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" Parser p \u003d new Parser(command, this.storage, this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" p.parse();","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" if (p.isEnd()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the response String given the input.","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" protected String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" Parser parser \u003d new Parser(input, this.storage, this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" String response \u003d parser.parse();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" return response;","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ChangruHenryQian":62}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates exception for the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class DukeException extends RuntimeException{","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":10}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates events which are Tasks with start and end.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, boolean isDone, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" + startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" + \" to: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" + endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" return \"E | \" + super.toTxt() + \" | \"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":45}},{"path":"src/main/java/duke/FixedDurationTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates FixedDurationTask which are Tasks with a fixed duration.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class FixedDurationTask extends Task {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" private String duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public FixedDurationTask(String description, String duration) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public FixedDurationTask(String description, boolean isDone, String duration) {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for FixedDurationTask for output.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[F]\" + super.toString() + \" (for: \"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" + this.duration + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of FixedDurationTask for storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" return \"F | \" + super.toTxt()","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"ChangruHenryQian":37}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" MainWindow mw \u003d fxmlLoader.\u003cMainWindow\u003egetController();","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" mw.setDuke(duke);","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" mw.start();","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":34}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" private Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates two dialog boxes, one echoing user input and the other","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" * containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" public void start() {","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getDukeDialog(Ui.welcomeMessage(), dukeImage)","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * Parses the user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private String command;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private boolean isEnd \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public Parser(String command, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" * Parses the user input and initiate following operations.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The resulting message.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" public String parse() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" try{","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.startsWith(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.listTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.markTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d createToDoFromCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newToDo);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d createDeadlineFromCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newDeadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d createEventFromCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newEvent);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"fixedduration\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" FixedDurationTask newFixedDurationTask \u003d createFixedDurationTaskFromCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newFixedDurationTask);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.deleteTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" this.isEnd \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.farewellMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" String keyword \u003d command.split(\" \", 2)[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.findTask(keyword);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" return \"Invalid command.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new FixedDurationTask from the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new FixedDurationTask.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" private FixedDurationTask createFixedDurationTaskFromCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /for \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" String duration \u003d command.split(\" /for \", 2)[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" FixedDurationTask newFixedDurationTask \u003d new FixedDurationTask(name, duration);","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" return newFixedDurationTask;","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new Event from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" private Event createEventFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate startTime \u003d LocalDate.parse(command.split(\" /from \", 2)[1]","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" .split(\" /to \", 2)[0]);","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate endTime \u003d LocalDate.parse(command.split(\" /to \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /from \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" return newEvent;","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new Deadline from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new Deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" private Deadline createDeadlineFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate deadline \u003d LocalDate.parse(command.split(\" /by \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /by \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d new Deadline(name, deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" return newDeadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new ToDo from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new ToDo.","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"ChangruHenryQian"},"content":" private ToDo createToDoFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d new ToDo(command.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"ChangruHenryQian"},"content":" return newToDo;","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns if the parser is ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"ChangruHenryQian"},"content":" public boolean isEnd() {","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"ChangruHenryQian"},"content":" return this.isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":117}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" * Manages storage of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" private String filePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" * Loads the task list with file.","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws IOException If unable to gain input from file.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" String dirPath \u003d this.filePath.split(\"/\")[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" File f \u003d getFile(dirPath);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e tasks \u003d loadTasks(f);","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" return tasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the file for storage. Initializes the file","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" * when necessary.","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" * @param path Path of the directory of the storage file.","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws IOException If an input or output exception occurs.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" private File getFile(String path) throws IOException {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" File dir \u003d new File(path);","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" return f;","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the task list after loading.","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" * @param f The file for storage.","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws FileNotFoundException If an attempt to open the file fails.","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" private ArrayList\u003cTask\u003e loadTasks(File f) throws FileNotFoundException {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" assert f.exists();","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" tasks.add(storageToTask(s.nextLine()));","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" * Converts the String input to Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The String input.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The corresponding Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" private Task storageToTask(String input) throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" String taskType \u003d input.split(\" \\\\| \")[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" boolean isComplete \u003d input.split(\" \\\\| \")[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" String description \u003d input.split(\" \\\\| \")[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" return new ToDo(description, isComplete);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" return this.createDeadlineFromStorage(input, description, isComplete);","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" return this.createEventFromStorage(input, description, isComplete);","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"F\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" return this.createFixedDurationTaskFromStorage(input, description, isComplete);","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unknown task type.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the FixedDurationTask from the storage input.","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the FixedDurationTask.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the FixedDurationTask is completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"ChangruHenryQian"},"content":" private FixedDurationTask createFixedDurationTaskFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"ChangruHenryQian"},"content":" String duration \u003d input.split(\" \\\\| \")[3];","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"ChangruHenryQian"},"content":" return new FixedDurationTask(description, isComplete, duration);","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the Event from the storage input.","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the Event is completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ChangruHenryQian"},"content":" private Event createEventFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate start \u003d LocalDate.parse(input.split(\" \\\\| \")[3],","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate end \u003d LocalDate.parse(input.split(\" \\\\| \")[4],","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"ChangruHenryQian"},"content":" return new Event(description, isComplete, start, end);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the Deadline from the storage input.","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the Deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the Deadline is completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"ChangruHenryQian"},"content":" private Deadline createDeadlineFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate d \u003d LocalDate.parse(input.split(\" \\\\| \")[3],","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"ChangruHenryQian"},"content":" return new Deadline(description, isComplete, d);","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"ChangruHenryQian"},"content":" * Adds the last task in the task list to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"ChangruHenryQian"},"content":" * @param list The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws DukeException If unable to write to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTheLastTaskToFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"ChangruHenryQian"},"content":" if (list.size() !\u003d 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(list.size() - 1).toTxt());","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"ChangruHenryQian"},"content":" * Rewrites the whole file with the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"ChangruHenryQian"},"content":" * @param list The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws DukeException If unable to write to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"ChangruHenryQian"},"content":" public void rewriteFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"ChangruHenryQian"},"content":" if (i !\u003d list.size() - 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"ChangruHenryQian"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":181}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates tasks for the chatbot.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" * Gets the status Icon of the Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" // X for done task","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" return (this.isDone ? \"1\" : \"0\") + \" | \" + this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":59}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates task list in the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" * Lists all tasks in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for listing.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.listTasks(this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" * Adds one task to the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for adding.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" public String addTask(Task t) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.addTheLastTaskToFile(this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.addTask(t, this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" * Deletes the task at the specified position in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" * @param num The position starts from 0.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for deleting.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" public String deleteTask(int num) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" assert num \u003e\u003d 0;","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" Task re \u003d tasks.remove(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.deleteTask(re, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" * Marks the task at the specified position in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" * @param num The position starts from 0.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for marking.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" public String markTask(int num) {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" assert num \u003e\u003d 0;","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d tasks.get(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.markTask(t);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" * Searches all Tasks with the keyword.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @param keyword The keyword.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for searching results.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" public String findTask(String keyword) {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" assert keyword !\u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" if (!tasks.get(i).toString().contains(keyword)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" result.add(tasks.get(i));","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.listMatchingTasks(result);","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":91}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates todos which are Tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return \"T | \" + super.toTxt();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":30}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates ui for chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns welcome message.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public static String welcomeMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Hello! I\u0027m Jarvis.\\n\"","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" + \" What can I do for you?\";","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns all tasks in task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public static String listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" String result \u003d \" Here are the tasks in your list:\";","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" while (counter !\u003d tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" counter++;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" result +\u003d \"\\n\" + \" \" + counter + \".\"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" + tasks.get(counter - 1).toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns matching tasks in task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" public static String listMatchingTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" String result \u003d \" Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" while (counter !\u003d tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" counter++;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" result +\u003d \"\\n\" + \" \" + counter + \".\"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" + tasks.get(counter - 1).toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns message for marking a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task marked.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" public static String markTask(Task t) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" + \" \" + t.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the message for adding a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task added.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" * @param taskList The task list of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" public static String addTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" + \" \" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" + \" Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the message for deleting a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task deleted.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" * @param taskList The task list of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" public static String deleteTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" + \" \" + t.toString() +\"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" + \" Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" * @param e The exception printed.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" public static String printException(DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" return \" \" + e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns farewell message.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" public static String farewellMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":99}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":19}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests TaskList class.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests addTask function.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" TaskList tl \u003d new TaskList(new ArrayList\u003c\u003e(), new Storage(\"data/tasks.txt\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" tl.addTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(t, tl.tasks.get(tl.tasks.size() - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":24}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests task class.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests markAsDone function.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\", false);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(true, t.isDone);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"todo finish homework","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"event class /from 8 am /to 10 am","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"deadline buy lunch /by noon","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"mark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"bye","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":6}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-15"},{"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":"ChangruHenryQian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"mainClassName \u003d \"duke.Launcher\"","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"-":38,"ChangruHenryQian":21}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"D | 0 | submit homework | Sep 30 2023","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"F | 1 | clean room | one hour","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"T | 0 | buy lunch","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"ChangruHenryQian":3}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"Jarvis is a chat bot for maintaining tasks.","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"### Auto saving and loading","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"Automatically saves your tasks and loads them next time.","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"## Usage","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"### `list` - Listing all tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"Shows a list of all tasks.","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"### `todo` - Adding a to-do task","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"Adds a to-do task.","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"`todo DESCRIPTION`","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"### `deadline` - Adding a task with a deadline","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"Adds a task with a deadline.","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":"`deadline DESCRIPTION /by DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"+ Date is in the format of yyyy-mm-dd.","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"\u0027deadline homework /by 2023-10-01\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"### `event` - Adding an event with a start and an end","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"Adds an event with a start and an end.","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":"`event DESCRIPTION /from DATE /to DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":"### `fixedduration` - Adding a task with a fixed duration","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"Adds a task with a fixed duration.","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":"`fixedduration DESCRIPTION /for TIME`","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":"### `mark` - Marking a task","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":"Marks a task in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":"`mark INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":"+ The index starts with 1.","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":"`mark 2` Marks the second task in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"### `delete` - Deleting a task","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":"Deletes a task in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":"`delete INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":"`delete 3` Deletes the third task in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":"### `find` - Searching for tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":"Finds the tasks in the list with a specific keyword.","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":"`find KEYWORD`","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"-":18,"ChangruHenryQian":56}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates deadline which are Tasks with start and end.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" return \"D | \" + super.toTxt()","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":42}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns user dialog.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" * @param text The text of the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" * @param img The image of the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns chat bot dialog.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" * @param text The text of the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" * @param img The image of the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":72}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"public class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" public Duke() {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this(\"data/tasks.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage.load(), storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(new DukeException(\"Unable to find storage file.\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" * Runs the program.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.welcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" while (true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" String command \u003d userInput.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" Parser p \u003d new Parser(command, this.storage, this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" p.parse();","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" if (p.isEnd()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the response String given the input.","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" protected String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" Parser parser \u003d new Parser(input, this.storage, this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" String response \u003d parser.parse();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" return response;","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ChangruHenryQian":62}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates exception for the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class DukeException extends RuntimeException{","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":10}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates events which are Tasks with start and end.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, boolean isDone, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" + startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" + \" to: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" + endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" return \"E | \" + super.toTxt() + \" | \"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":45}},{"path":"src/main/java/duke/FixedDurationTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates FixedDurationTask which are Tasks with a fixed duration.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class FixedDurationTask extends Task {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" private String duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public FixedDurationTask(String description, String duration) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public FixedDurationTask(String description, boolean isDone, String duration) {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for FixedDurationTask for output.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[F]\" + super.toString() + \" (for: \"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" + this.duration + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of FixedDurationTask for storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" return \"F | \" + super.toTxt()","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"ChangruHenryQian":37}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" MainWindow mw \u003d fxmlLoader.\u003cMainWindow\u003egetController();","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" mw.setDuke(duke);","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" mw.start();","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":34}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" private Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates two dialog boxes, one echoing user input and the other","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" * containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" public void start() {","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getDukeDialog(Ui.welcomeMessage(), dukeImage)","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * Parses the user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private String command;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" private boolean isEnd \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public Parser(String command, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" * Parses the user input and initiate following operations.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The resulting message.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" public String parse() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" try{","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.startsWith(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.listTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.markTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d createToDoFromCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newToDo);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d createDeadlineFromCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newDeadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d createEventFromCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newEvent);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"fixedduration\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" FixedDurationTask newFixedDurationTask \u003d createFixedDurationTaskFromCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.addTask(newFixedDurationTask);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.deleteTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" String keyword \u003d command.split(\" \", 2)[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.findTask(keyword);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" this.isEnd \u003d true;","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.farewellMessage();","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" return \"Invalid command.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new FixedDurationTask from the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new FixedDurationTask.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" private FixedDurationTask createFixedDurationTaskFromCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /for \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" String duration \u003d command.split(\" /for \", 2)[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" FixedDurationTask newFixedDurationTask \u003d new FixedDurationTask(name, duration);","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" return newFixedDurationTask;","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new Event from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" private Event createEventFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate startTime \u003d LocalDate.parse(command.split(\" /from \", 2)[1]","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" .split(\" /to \", 2)[0]);","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate endTime \u003d LocalDate.parse(command.split(\" /to \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /from \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" return newEvent;","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new Deadline from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new Deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" private Deadline createDeadlineFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate deadline \u003d LocalDate.parse(command.split(\" /by \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /by \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d new Deadline(name, deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" return newDeadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new ToDo from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new ToDo.","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"ChangruHenryQian"},"content":" private ToDo createToDoFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d new ToDo(command.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"ChangruHenryQian"},"content":" return newToDo;","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns if the parser is ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"ChangruHenryQian"},"content":" public boolean isEnd() {","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"ChangruHenryQian"},"content":" return this.isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":117}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" * Manages storage of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" private String filePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" * Loads the task list with file.","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws IOException If unable to gain input from file.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" String dirPath \u003d this.filePath.split(\"/\")[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" File f \u003d getFile(dirPath);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e tasks \u003d loadTasks(f);","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" return tasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the file for storage. Initializes the file","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" * when necessary.","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" * @param path Path of the directory of the storage file.","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws IOException If an input or output exception occurs.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" private File getFile(String path) throws IOException {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" File dir \u003d new File(path);","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" return f;","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the task list after loading.","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" * @param f The file for storage.","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws FileNotFoundException If an attempt to open the file fails.","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" private ArrayList\u003cTask\u003e loadTasks(File f) throws FileNotFoundException {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" assert f.exists();","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" tasks.add(storageToTask(s.nextLine()));","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" * Converts the String input to Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The String input.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The corresponding Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" private Task storageToTask(String input) throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" String taskType \u003d input.split(\" \\\\| \")[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" boolean isComplete \u003d input.split(\" \\\\| \")[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" String description \u003d input.split(\" \\\\| \")[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" return new ToDo(description, isComplete);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" return this.createDeadlineFromStorage(input, description, isComplete);","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" return this.createEventFromStorage(input, description, isComplete);","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"F\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" return this.createFixedDurationTaskFromStorage(input, description, isComplete);","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unknown task type.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the FixedDurationTask from the storage input.","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the FixedDurationTask.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the FixedDurationTask is completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"ChangruHenryQian"},"content":" private FixedDurationTask createFixedDurationTaskFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"ChangruHenryQian"},"content":" String duration \u003d input.split(\" \\\\| \")[3];","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"ChangruHenryQian"},"content":" return new FixedDurationTask(description, isComplete, duration);","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the Event from the storage input.","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the Event is completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ChangruHenryQian"},"content":" private Event createEventFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate start \u003d LocalDate.parse(input.split(\" \\\\| \")[3],","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate end \u003d LocalDate.parse(input.split(\" \\\\| \")[4],","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"ChangruHenryQian"},"content":" return new Event(description, isComplete, start, end);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the Deadline from the storage input.","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the Deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the Deadline is completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"ChangruHenryQian"},"content":" private Deadline createDeadlineFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate d \u003d LocalDate.parse(input.split(\" \\\\| \")[3],","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"ChangruHenryQian"},"content":" return new Deadline(description, isComplete, d);","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"ChangruHenryQian"},"content":" * Adds the last task in the task list to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"ChangruHenryQian"},"content":" * @param list The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws DukeException If unable to write to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTheLastTaskToFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"ChangruHenryQian"},"content":" if (list.size() !\u003d 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(list.size() - 1).toTxt());","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"ChangruHenryQian"},"content":" * Rewrites the whole file with the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"ChangruHenryQian"},"content":" * @param list The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws DukeException If unable to write to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"ChangruHenryQian"},"content":" public void rewriteFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"ChangruHenryQian"},"content":" if (i !\u003d list.size() - 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"ChangruHenryQian"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":181}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates tasks for the chatbot.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" * Gets the status Icon of the Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" // X for done task","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" return (this.isDone ? \"1\" : \"0\") + \" | \" + this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":59}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates task list in the chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" * Lists all tasks in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for listing.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.listTasks(this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" * Adds one task to the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for adding.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" public String addTask(Task t) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.addTheLastTaskToFile(this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.addTask(t, this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" * Deletes the task at the specified position in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" * @param num The position starts from 0.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for deleting.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" public String deleteTask(int num) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" assert num \u003e\u003d 0;","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" Task re \u003d tasks.remove(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.deleteTask(re, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" * Marks the task at the specified position in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" * @param num The position starts from 0.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for marking.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" public String markTask(int num) {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" assert num \u003e\u003d 0;","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d tasks.get(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.markTask(t);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" * Searches all Tasks with the keyword.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @param keyword The keyword.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The message for searching results.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" public String findTask(String keyword) {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" assert keyword !\u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" if (!tasks.get(i).toString().contains(keyword)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" result.add(tasks.get(i));","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.listMatchingTasks(result);","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":91}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates todos which are Tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation for the task for output.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns a String representation of the task for storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" return \"T | \" + super.toTxt();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":30}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" * Encapsulates ui for chat bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns welcome message.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public static String welcomeMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Hello! I\u0027m Jarvis.\\n\"","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" + \" What can I do for you?\";","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns all tasks in task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public static String listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" String result \u003d \" Here are the tasks in your list:\";","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" while (counter !\u003d tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" counter++;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" result +\u003d \"\\n\" + \" \" + counter + \".\"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" + tasks.get(counter - 1).toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns matching tasks in task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" public static String listMatchingTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" String result \u003d \" Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" while (counter !\u003d tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" counter++;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" result +\u003d \"\\n\" + \" \" + counter + \".\"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" + tasks.get(counter - 1).toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns message for marking a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task marked.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" public static String markTask(Task t) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" + \" \" + t.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the message for adding a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task added.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" * @param taskList The task list of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" public static String addTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" + \" \" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" + \" Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the message for deleting a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" * @param t The task deleted.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" * @param taskList The task list of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" public static String deleteTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" + \" \" + t.toString() +\"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" + \" Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns the exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" * @param e The exception printed.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" public static String printException(DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" return \" \" + e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns farewell message.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" public static String farewellMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":" return \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":99}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":19}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests TaskList class.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests addTask function.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" TaskList tl \u003d new TaskList(new ArrayList\u003c\u003e(), new Storage(\"data/tasks.txt\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" tl.addTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(t, tl.tasks.get(tl.tasks.size() - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":24}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests task class.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" * Tests markAsDone function.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\", false);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(true, t.isDone);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"todo finish homework","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"event class /from 8 am /to 10 am","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"deadline buy lunch /by noon","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"mark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"bye","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":6}}] diff --git a/ChangruHenryQian_ip_master/commits.json b/ChangruHenryQian_ip_master/commits.json index 2089c6d5..91a52652 100644 --- a/ChangruHenryQian_ip_master/commits.json +++ b/ChangruHenryQian_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ChangruHenryQian":[{"date":"2023-08-24","commitResults":[{"hash":"5080e17e62936c1646c62c91e2ea337e3c76d9bc","isMergeCommit":false,"messageTitle":"Finish Level 0. Rename, Greet, Exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"3d4a50f077fc7964084a065ae0efbb6d815da0dc","isMergeCommit":false,"messageTitle":"Finish Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-26","commitResults":[{"hash":"fe29b0f9781439417b12b42ab86139441d39cc45","isMergeCommit":false,"messageTitle":"Finish Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}}]},{"date":"2023-08-27","commitResults":[{"hash":"02481a9ba00cfdc8f90f359b070f8eafbafcb2a2","isMergeCommit":false,"messageTitle":"Finish Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"91639a88821d08153bc2533521617a895d203e25","isMergeCommit":false,"messageTitle":"Finish Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":27}}},{"hash":"cab0141507b0b629413977d1dc0e0b22eb350f45","isMergeCommit":false,"messageTitle":"Finish A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"28266b31eb6565c3a7a61fde318af3c56a6ba61b","isMergeCommit":false,"messageTitle":"Finish Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":48}}},{"hash":"611f1efab640729148e5668f2bc6d184cc9ce542","isMergeCommit":false,"messageTitle":"Finish Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"4197612c99bd3dd2588c2f80d9e71e4dc45177ff","isMergeCommit":false,"messageTitle":"Finish Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":223,"deletions":8}}},{"hash":"c0ea8a2eeb3f00f55fbaff5c811b5568633d2a19","isMergeCommit":false,"messageTitle":"Update data/duke.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"bf86dc175311f8f8180a484cd5c166ce8a1db59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"992ec015c9add6f24fd58e981287475b91b1a865","isMergeCommit":false,"messageTitle":"Finish Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":45,"deletions":20}}},{"hash":"113e1d3d127175987bc093d12121560ee5639c06","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1f284c95cb16b525bf60d008b3dba20e4ff919bb","isMergeCommit":false,"messageTitle":"Finish A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":167,"deletions":157}}},{"hash":"92e988c3b184a575872228ac9a71adac737b430b","isMergeCommit":false,"messageTitle":"Fix bug on delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}},{"hash":"5c4a3ba069012500896fdecce250a5ad0d20c638","isMergeCommit":false,"messageTitle":"Finish A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":11}}},{"hash":"d197fc24b4d3c8555515f61edd21f6e7611d6ac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e450bede93e429bf141ce93c02e8e95118656d03","isMergeCommit":false,"messageTitle":"Finish A-Gradle: Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2a0dedd0d1d4e877f6f11c2ab39d141c6d29a2e3","isMergeCommit":false,"messageTitle":"Finish A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":3}}},{"hash":"8ac539181e47054e3821342b0608faa5b83707ff","isMergeCommit":false,"messageTitle":"Finish A-Jar: Create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-09-10","commitResults":[{"hash":"dcc482955a511bbc6f4c00cf3af057ae530e67ef","isMergeCommit":false,"messageTitle":"Add part of Java Doc.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":1}}},{"hash":"98baa4915be85f778240fe64e91316f5e8163395","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cb8b5d678c7c0f57a91a52268a66f4f2bba61b4e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a011a9ef6f0e096ad9f323c8691cf06ecfe97766","isMergeCommit":false,"messageTitle":"Implement coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"af45b367b2afbc27277078bdc5017a9140923d47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b0af1ec175701908517fed9283e79de98aa59c34","isMergeCommit":false,"messageTitle":"Update JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":83,"deletions":15}}},{"hash":"1d67ccf935e752e2d25202e49251a381a7b2f68c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b47f6501e167a19c1c0a765be781eafc3420ca81","isMergeCommit":false,"messageTitle":"Update JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"8e4c58edf7fe6ca0c6275a1bdfe71554b2810d99","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"c529dc9daf400749bcdb8e78040504ce545525c8","isMergeCommit":false,"messageTitle":"Start Level 9. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":1}}},{"hash":"b88d6050861a99a2a55c01361f3148a3bad422bb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfc25a97d4752c8294b33c8febc9f734f8fa280b","isMergeCommit":false,"messageTitle":"Implement Level 9. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"2a192a38302d65cd9bff52e8de7b6aa3a9f4cb75","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"9ff4bbc38757c3f1f51fa03a7bb99f27b46ffd16","isMergeCommit":false,"messageTitle":"Start Level 10. GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":229,"deletions":65}}},{"hash":"76ab079d57f7ae3774351d2ccc6000ecf387fe46","isMergeCommit":false,"messageTitle":"Implement Level 10. GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":20}}},{"hash":"d1c94f84c2eace42a0b707c1fd245ecae9581546","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"3b3712a0a5959607a82e29559aedc13282de3fad","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"After implementing GUI, the entry point was changed.\n\nLet\u0027s change mainClass into duke.Launcher.\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"b76decc9329baaee0eb874572a1129d049958f28","isMergeCommit":false,"messageTitle":"Implement A-Assertions","messageBody":"The functional code is not capable of checking assumptions.\n\nAssumptions may not be true in some cases and checking is required.\n\nLet\u0027s add assert feature to document important assumptions.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":11,"deletions":0}}},{"hash":"59658ebb3112a24e7054a3db8598a8704d1b14bf","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Some parts of the code have bad code quality.\n\nImprovements on code quality increase readability.\n\nLet\u0027s improve code quality through methods such as refactoring.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":112,"deletions":27}}},{"hash":"e20422e0085fe50fdfb78737ae62983cc84a44ea","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ChangruHenryQian/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"f1c1337e4435c8e8ae2756b6e96e431218c98dca","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Storage.java\n","fileTypesAndContributionMap":{}},{"hash":"ed26f34f2cdd0c4e35b2d03e1ecc5a7bb0128a4c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ChangruHenryQian/branch-A-Assertions","messageBody":"Implement assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a146f5abc9c7127506af70a7a6ed00e2a65bf89e","isMergeCommit":false,"messageTitle":"Implement B-FixedDurationTasks","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}}]},{"date":"2023-09-18","commitResults":[{"hash":"fe210a3ca85e1ab8bddbca7a2361667b25742f98","isMergeCommit":false,"messageTitle":"Add welcome message into GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":3},"txt":{"insertions":1,"deletions":0},"java":{"insertions":12,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"ChangruHenryQian":{"java":996,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":7}},"authorContributionVariance":{"ChangruHenryQian":21742.846},"authorDisplayNameMap":{"ChangruHenryQian":"CS2103T-T11-1 QIAN..NGRU"}} +{"authorDailyContributionsMap":{"ChangruHenryQian":[{"date":"2023-08-24","commitResults":[{"hash":"5080e17e62936c1646c62c91e2ea337e3c76d9bc","isMergeCommit":false,"messageTitle":"Finish Level 0. Rename, Greet, Exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"3d4a50f077fc7964084a065ae0efbb6d815da0dc","isMergeCommit":false,"messageTitle":"Finish Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-26","commitResults":[{"hash":"fe29b0f9781439417b12b42ab86139441d39cc45","isMergeCommit":false,"messageTitle":"Finish Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}}]},{"date":"2023-08-27","commitResults":[{"hash":"02481a9ba00cfdc8f90f359b070f8eafbafcb2a2","isMergeCommit":false,"messageTitle":"Finish Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"91639a88821d08153bc2533521617a895d203e25","isMergeCommit":false,"messageTitle":"Finish Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":27}}},{"hash":"cab0141507b0b629413977d1dc0e0b22eb350f45","isMergeCommit":false,"messageTitle":"Finish A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"28266b31eb6565c3a7a61fde318af3c56a6ba61b","isMergeCommit":false,"messageTitle":"Finish Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":48}}},{"hash":"611f1efab640729148e5668f2bc6d184cc9ce542","isMergeCommit":false,"messageTitle":"Finish Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"4197612c99bd3dd2588c2f80d9e71e4dc45177ff","isMergeCommit":false,"messageTitle":"Finish Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":223,"deletions":8}}},{"hash":"c0ea8a2eeb3f00f55fbaff5c811b5568633d2a19","isMergeCommit":false,"messageTitle":"Update data/duke.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"bf86dc175311f8f8180a484cd5c166ce8a1db59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"992ec015c9add6f24fd58e981287475b91b1a865","isMergeCommit":false,"messageTitle":"Finish Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":45,"deletions":20}}},{"hash":"113e1d3d127175987bc093d12121560ee5639c06","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1f284c95cb16b525bf60d008b3dba20e4ff919bb","isMergeCommit":false,"messageTitle":"Finish A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":167,"deletions":157}}},{"hash":"92e988c3b184a575872228ac9a71adac737b430b","isMergeCommit":false,"messageTitle":"Fix bug on delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}},{"hash":"5c4a3ba069012500896fdecce250a5ad0d20c638","isMergeCommit":false,"messageTitle":"Finish A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":11}}},{"hash":"d197fc24b4d3c8555515f61edd21f6e7611d6ac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e450bede93e429bf141ce93c02e8e95118656d03","isMergeCommit":false,"messageTitle":"Finish A-Gradle: Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2a0dedd0d1d4e877f6f11c2ab39d141c6d29a2e3","isMergeCommit":false,"messageTitle":"Finish A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":3}}},{"hash":"8ac539181e47054e3821342b0608faa5b83707ff","isMergeCommit":false,"messageTitle":"Finish A-Jar: Create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-09-10","commitResults":[{"hash":"dcc482955a511bbc6f4c00cf3af057ae530e67ef","isMergeCommit":false,"messageTitle":"Add part of Java Doc.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":1}}},{"hash":"98baa4915be85f778240fe64e91316f5e8163395","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cb8b5d678c7c0f57a91a52268a66f4f2bba61b4e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a011a9ef6f0e096ad9f323c8691cf06ecfe97766","isMergeCommit":false,"messageTitle":"Implement coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"af45b367b2afbc27277078bdc5017a9140923d47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b0af1ec175701908517fed9283e79de98aa59c34","isMergeCommit":false,"messageTitle":"Update JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":83,"deletions":15}}},{"hash":"1d67ccf935e752e2d25202e49251a381a7b2f68c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b47f6501e167a19c1c0a765be781eafc3420ca81","isMergeCommit":false,"messageTitle":"Update JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"8e4c58edf7fe6ca0c6275a1bdfe71554b2810d99","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"c529dc9daf400749bcdb8e78040504ce545525c8","isMergeCommit":false,"messageTitle":"Start Level 9. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":1}}},{"hash":"b88d6050861a99a2a55c01361f3148a3bad422bb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfc25a97d4752c8294b33c8febc9f734f8fa280b","isMergeCommit":false,"messageTitle":"Implement Level 9. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"2a192a38302d65cd9bff52e8de7b6aa3a9f4cb75","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"9ff4bbc38757c3f1f51fa03a7bb99f27b46ffd16","isMergeCommit":false,"messageTitle":"Start Level 10. GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":229,"deletions":65}}},{"hash":"76ab079d57f7ae3774351d2ccc6000ecf387fe46","isMergeCommit":false,"messageTitle":"Implement Level 10. GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":20}}},{"hash":"d1c94f84c2eace42a0b707c1fd245ecae9581546","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"3b3712a0a5959607a82e29559aedc13282de3fad","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"After implementing GUI, the entry point was changed.\n\nLet\u0027s change mainClass into duke.Launcher.\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"b76decc9329baaee0eb874572a1129d049958f28","isMergeCommit":false,"messageTitle":"Implement A-Assertions","messageBody":"The functional code is not capable of checking assumptions.\n\nAssumptions may not be true in some cases and checking is required.\n\nLet\u0027s add assert feature to document important assumptions.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":11,"deletions":0}}},{"hash":"59658ebb3112a24e7054a3db8598a8704d1b14bf","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Some parts of the code have bad code quality.\n\nImprovements on code quality increase readability.\n\nLet\u0027s improve code quality through methods such as refactoring.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":112,"deletions":27}}},{"hash":"e20422e0085fe50fdfb78737ae62983cc84a44ea","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ChangruHenryQian/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"f1c1337e4435c8e8ae2756b6e96e431218c98dca","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Storage.java\n","fileTypesAndContributionMap":{}},{"hash":"ed26f34f2cdd0c4e35b2d03e1ecc5a7bb0128a4c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ChangruHenryQian/branch-A-Assertions","messageBody":"Implement assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a146f5abc9c7127506af70a7a6ed00e2a65bf89e","isMergeCommit":false,"messageTitle":"Implement B-FixedDurationTasks","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}}]},{"date":"2023-09-18","commitResults":[{"hash":"fe210a3ca85e1ab8bddbca7a2361667b25742f98","isMergeCommit":false,"messageTitle":"Add welcome message into GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":3},"txt":{"insertions":1,"deletions":0},"java":{"insertions":12,"deletions":4}}},{"hash":"b761c70dcbbc4580fe21d46694e63fb42e4ededb","isMergeCommit":false,"messageTitle":"Add a representative screenshot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1}}},{"hash":"3f8b8db708df21976c37b347a45c5aa5a548d485","isMergeCommit":false,"messageTitle":"Implement A-UserGuide: User Guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3},"md":{"insertions":60,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"ChangruHenryQian":{"java":996,"md":56,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":9}},"authorContributionVariance":{"ChangruHenryQian":21742.094},"authorDisplayNameMap":{"ChangruHenryQian":"CS2103T-T11-1 QIAN..NGRU"}} diff --git a/Cikguseven_ip_master/commits.json b/Cikguseven_ip_master/commits.json index e648dff7..d379b24d 100644 --- a/Cikguseven_ip_master/commits.json +++ b/Cikguseven_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Cikguseven":[{"date":"2023-08-19","commitResults":[{"hash":"663bcb81dc5739c3e02e98e6f1718c38f7ed2dee","isMergeCommit":false,"messageTitle":"Initial skeleton version of Oscar chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"0b9264c8a47b2056235f9686b9601d977ae154f2","isMergeCommit":false,"messageTitle":"Skeletal version of Oscar with echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":7}}},{"hash":"98b0dd237b966b70a421e0ba7d2ee8047f620726","isMergeCommit":false,"messageTitle":"Oscar can now store user text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}}]},{"date":"2023-08-20","commitResults":[{"hash":"6ced18dc14e12f5c1a8b505e6bac172697a8187d","isMergeCommit":false,"messageTitle":"Completed Level 3 with mark and unmark features","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":12}}},{"hash":"2f18cc5aaa3945228b317edc20893e4eebd67566","isMergeCommit":false,"messageTitle":"Completed Level 4.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":163,"deletions":45}}},{"hash":"dafea925a8f56c07984ebc6498b67c95e613872b","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":0}}},{"hash":"b31e048fdfd2bb7ef1862fb9214bf8967b34c23d","isMergeCommit":false,"messageTitle":"Completed Level 5.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":58}}},{"hash":"55b8f3df5e1fd7f4eff1e6bb2db1d9cbdaff6fda","isMergeCommit":false,"messageTitle":"Completed Level 6.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"9fe064f8900c160ccc615fe7cdd31a64557e0780","isMergeCommit":false,"messageTitle":"Fixed exception handling in Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":61}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5cf7524eca6064ca05be50110a32601751417ff0","isMergeCommit":false,"messageTitle":"Added enums for commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":39}}},{"hash":"fadc881c97aeff8d19453dbabc86db519cbbbba9","isMergeCommit":false,"messageTitle":"Renamed Duke.java to Oscar.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"770dae71de2db6adff8c9fc23e9187b1e05b5ead","isMergeCommit":false,"messageTitle":"Renamed DukeException.java to OscarException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"eb1fcb3ce2442865389f3a6ad69b6c60a1669403","isMergeCommit":false,"messageTitle":"Reformat case statements.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":69}}}]},{"date":"2023-08-28","commitResults":[{"hash":"856d55a673761f5511bc44849cd9397e3540728b","isMergeCommit":false,"messageTitle":"Add Level 7 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":16}}},{"hash":"b633d08107fbed8e0905529c8ec65241aacbd86c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c257066674428836b7fc7606b64f4298d832d48e","isMergeCommit":false,"messageTitle":"Initial implementation of Level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":8}}}]},{"date":"2023-08-29","commitResults":[{"hash":"2e0a06e7a76e305c221737f8274d10088cff72d5","isMergeCommit":false,"messageTitle":"Add initial version of date time support.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":28}}}]},{"date":"2023-08-30","commitResults":[{"hash":"131153df16f5c2a148e7b265883f1b01d7d0fa2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"5757a9854a2342b90a23d9dc4ac9380ee7b37cf5","isMergeCommit":false,"messageTitle":"Modify project to use more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":721,"deletions":345}}},{"hash":"d238b62a4d55496bb8798012a70b6d3b0f8f0259","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b57c1bd0d95b1dcba68507a0d1859a7190c22d62","isMergeCommit":false,"messageTitle":"Add files for tracking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":1}}},{"hash":"140957a238f053bcee4ad1515c567997206ad075","isMergeCommit":false,"messageTitle":"Format imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"85cc4f0400846a1e26e427be32975159e5463000","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f6401e9927d39cc2cdd14d38d662a8e13da6d714","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"2424f6b7fe7aeaa6755ee55fd1efd2ba62310976","isMergeCommit":false,"messageTitle":"Add Junit Tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":31}}},{"hash":"b0f03b0b8c96e548cead4733d16f2e4239c49024","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"ac0a2412e41a932981a98eb8096ff3e7cb7960a8","isMergeCommit":false,"messageTitle":"Fix method signature of commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":16}}},{"hash":"7b12f965bc88b39ad0a71919585ee281d23a2708","isMergeCommit":false,"messageTitle":"Create JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"9c611a85d15115dfa1c463f8171e2abfa5e5e844","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":30}}},{"hash":"7ace05a97b19074e74999d128013130f94bc8091","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bad076a0b82b0e529d73e1db1358b7a7a1d1fea3","isMergeCommit":false,"messageTitle":"Follow the coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":52}}},{"hash":"8ef9cb1002ad944e50f4c1bf292c7603c341e03f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b917e0967c72f7342e2b5c45b21e99f5beda4506","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":39}}},{"hash":"6e7e839947fe8e4b6b8f60dbcbc7afb8346c89c5","isMergeCommit":true,"messageTitle":"Add parallel increments","messageBody":"","tags":["Week-3"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"3f39e96e6b792da74af735a04073ab915edb8c37","isMergeCommit":false,"messageTitle":"Add checkstyle files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"8c3c955a87f0758a2a42b94f72ea9c82541c5a5a","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":148}}},{"hash":"a7dc71b6e1fc6181a91bd1b79184cfe2f0358f9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3ba0d7fdd2bc7655203ee1c5484ff9069ea4a04","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":32,"deletions":24}}},{"hash":"f7a11283ba937747ccadc15b61e5212849f12b6a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"6174ee8a9779d8cb01d1df80bce85f59fb041f94","isMergeCommit":false,"messageTitle":"Modify build.gradle to support JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"4bf940325bd439414a704b3f15c8d955ec2713cd","isMergeCommit":false,"messageTitle":"Add JavaFX tutorial","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":353,"deletions":3}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dbd847dc07a2ea58bf786879f3e538877cd02205","isMergeCommit":false,"messageTitle":"Add new images","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"5e12a85150e303bab4fa39f31ff440e8410f53ab","isMergeCommit":false,"messageTitle":"JavaFX WIP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":223}}}]},{"date":"2023-09-06","commitResults":[{"hash":"81b1daa6133563e6c32c7e0d95253c645c4d966a","isMergeCommit":false,"messageTitle":"Add Level 10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":25,"deletions":10},"java":{"insertions":43,"deletions":207}}},{"hash":"8134870f93ecc8f33384e89bf48fc3388c74b534","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"91e82e75f95635984fc65caced81f9ad764be72e","isMergeCommit":false,"messageTitle":"Modify JAR launcher","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3}}},{"hash":"5cd37e92e933085534c1eed03a2a192bde4cc175","isMergeCommit":false,"messageTitle":"Modify start point of JAR Launcher","messageBody":"JAR launcher was using Oscar.java as the start point before GUI was added.\n\nAfter adding Javafx for Oscar to have GUI, mainClass.set() in build.gradle needs to have the updated start point launcher file. We use Launcher.java instead of Oscar.java with Javafx.\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3}}},{"hash":"ae8e38bd64df8dcba4a08e31e6cf0a2cced0ccc1","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Code did not contain assertions previously.\n\nAdding assertions to the code help to verify the programme\u0027s runtime\nstate and assumptions.\n\nAssertions have been added liberally as per requirements. Added\nassertions are mostly used to ensure that method parameters\nare not null.\n","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}}]},{"date":"2023-09-13","commitResults":[{"hash":"e1ecf122a0f88b0a9bd08a079242daa998dc41b5","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":78}}},{"hash":"ab1c9331f5fb7de39f1fd51b313bdb220130c8cf","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Cikguseven/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"19f49e4090c4756ffb169174c36948b14b72c501","isMergeCommit":true,"messageTitle":"Add assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"50eab3289176a3fb5ee810ef7c8d0e7443e10c83","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Cikguseven/branch-A-Assertions","messageBody":"Added assertions to the code to verify the programme\u0027s runtime state and assumptions.\r\n","fileTypesAndContributionMap":{}},{"hash":"3b6046ae074bfd8c1b986d8d79461e1881eb87ce","isMergeCommit":false,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"a5aefb1436eceded2269a8253226a57bf33068d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Cikguseven/ip","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"d6c9b61c4851ee450dab54179f728aff89f74558","isMergeCommit":false,"messageTitle":"Add Note feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":441,"deletions":330}}},{"hash":"3ab2a7b340b4f9ae777358a2f45b617cf7fad6b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-D-Notes\u0027","messageBody":"","tags":["D-Notes","BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"35060673e4952a0cbc01c15b44fabb5302d7679d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":17}}}]},{"date":"2023-09-17","commitResults":[{"hash":"123ffaeacc68ac6fd0f981ce95ec81fede7d16a0","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2},"md":{"insertions":82,"deletions":13}}},{"hash":"8943a415001b547c21a77ec3cb47860cac91c03a","isMergeCommit":false,"messageTitle":"Update user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"b81230f385c55c63dafb5fc9ae43b0d48dfc2d5b","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":8}}},{"hash":"75daf4455cb64d9207d63d7cc924bbf824afb394","isMergeCommit":false,"messageTitle":"Release","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Cikguseven":{"java":1523,"md":107,"fxml":50,"sh":1,"bat":1,"gradle":23,"txt":7}},"authorContributionVariance":{"Cikguseven":140736.16},"authorDisplayNameMap":{"Cikguseven":"CS2103T-T11-1 KIER.. WEI"}} +{"authorDailyContributionsMap":{"Cikguseven":[{"date":"2023-08-19","commitResults":[{"hash":"663bcb81dc5739c3e02e98e6f1718c38f7ed2dee","isMergeCommit":false,"messageTitle":"Initial skeleton version of Oscar chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"0b9264c8a47b2056235f9686b9601d977ae154f2","isMergeCommit":false,"messageTitle":"Skeletal version of Oscar with echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":7}}},{"hash":"98b0dd237b966b70a421e0ba7d2ee8047f620726","isMergeCommit":false,"messageTitle":"Oscar can now store user text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}}]},{"date":"2023-08-20","commitResults":[{"hash":"6ced18dc14e12f5c1a8b505e6bac172697a8187d","isMergeCommit":false,"messageTitle":"Completed Level 3 with mark and unmark features","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":12}}},{"hash":"2f18cc5aaa3945228b317edc20893e4eebd67566","isMergeCommit":false,"messageTitle":"Completed Level 4.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":163,"deletions":45}}},{"hash":"dafea925a8f56c07984ebc6498b67c95e613872b","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":0}}},{"hash":"b31e048fdfd2bb7ef1862fb9214bf8967b34c23d","isMergeCommit":false,"messageTitle":"Completed Level 5.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":58}}},{"hash":"55b8f3df5e1fd7f4eff1e6bb2db1d9cbdaff6fda","isMergeCommit":false,"messageTitle":"Completed Level 6.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"9fe064f8900c160ccc615fe7cdd31a64557e0780","isMergeCommit":false,"messageTitle":"Fixed exception handling in Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":61}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5cf7524eca6064ca05be50110a32601751417ff0","isMergeCommit":false,"messageTitle":"Added enums for commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":39}}},{"hash":"fadc881c97aeff8d19453dbabc86db519cbbbba9","isMergeCommit":false,"messageTitle":"Renamed Duke.java to Oscar.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"770dae71de2db6adff8c9fc23e9187b1e05b5ead","isMergeCommit":false,"messageTitle":"Renamed DukeException.java to OscarException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"eb1fcb3ce2442865389f3a6ad69b6c60a1669403","isMergeCommit":false,"messageTitle":"Reformat case statements.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":69}}}]},{"date":"2023-08-28","commitResults":[{"hash":"856d55a673761f5511bc44849cd9397e3540728b","isMergeCommit":false,"messageTitle":"Add Level 7 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":16}}},{"hash":"b633d08107fbed8e0905529c8ec65241aacbd86c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c257066674428836b7fc7606b64f4298d832d48e","isMergeCommit":false,"messageTitle":"Initial implementation of Level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":8}}}]},{"date":"2023-08-29","commitResults":[{"hash":"2e0a06e7a76e305c221737f8274d10088cff72d5","isMergeCommit":false,"messageTitle":"Add initial version of date time support.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":28}}}]},{"date":"2023-08-30","commitResults":[{"hash":"131153df16f5c2a148e7b265883f1b01d7d0fa2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"5757a9854a2342b90a23d9dc4ac9380ee7b37cf5","isMergeCommit":false,"messageTitle":"Modify project to use more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":721,"deletions":345}}},{"hash":"d238b62a4d55496bb8798012a70b6d3b0f8f0259","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b57c1bd0d95b1dcba68507a0d1859a7190c22d62","isMergeCommit":false,"messageTitle":"Add files for tracking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":1}}},{"hash":"140957a238f053bcee4ad1515c567997206ad075","isMergeCommit":false,"messageTitle":"Format imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"85cc4f0400846a1e26e427be32975159e5463000","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f6401e9927d39cc2cdd14d38d662a8e13da6d714","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"2424f6b7fe7aeaa6755ee55fd1efd2ba62310976","isMergeCommit":false,"messageTitle":"Add Junit Tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":31}}},{"hash":"b0f03b0b8c96e548cead4733d16f2e4239c49024","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"ac0a2412e41a932981a98eb8096ff3e7cb7960a8","isMergeCommit":false,"messageTitle":"Fix method signature of commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":16}}},{"hash":"7b12f965bc88b39ad0a71919585ee281d23a2708","isMergeCommit":false,"messageTitle":"Create JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"9c611a85d15115dfa1c463f8171e2abfa5e5e844","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":30}}},{"hash":"7ace05a97b19074e74999d128013130f94bc8091","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bad076a0b82b0e529d73e1db1358b7a7a1d1fea3","isMergeCommit":false,"messageTitle":"Follow the coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":52}}},{"hash":"8ef9cb1002ad944e50f4c1bf292c7603c341e03f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b917e0967c72f7342e2b5c45b21e99f5beda4506","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":39}}},{"hash":"6e7e839947fe8e4b6b8f60dbcbc7afb8346c89c5","isMergeCommit":true,"messageTitle":"Add parallel increments","messageBody":"","tags":["Week-3"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"3f39e96e6b792da74af735a04073ab915edb8c37","isMergeCommit":false,"messageTitle":"Add checkstyle files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"8c3c955a87f0758a2a42b94f72ea9c82541c5a5a","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":148}}},{"hash":"a7dc71b6e1fc6181a91bd1b79184cfe2f0358f9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3ba0d7fdd2bc7655203ee1c5484ff9069ea4a04","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":32,"deletions":24}}},{"hash":"f7a11283ba937747ccadc15b61e5212849f12b6a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"6174ee8a9779d8cb01d1df80bce85f59fb041f94","isMergeCommit":false,"messageTitle":"Modify build.gradle to support JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"4bf940325bd439414a704b3f15c8d955ec2713cd","isMergeCommit":false,"messageTitle":"Add JavaFX tutorial","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":353,"deletions":3}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dbd847dc07a2ea58bf786879f3e538877cd02205","isMergeCommit":false,"messageTitle":"Add new images","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"5e12a85150e303bab4fa39f31ff440e8410f53ab","isMergeCommit":false,"messageTitle":"JavaFX WIP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":223}}}]},{"date":"2023-09-06","commitResults":[{"hash":"81b1daa6133563e6c32c7e0d95253c645c4d966a","isMergeCommit":false,"messageTitle":"Add Level 10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":25,"deletions":10},"java":{"insertions":43,"deletions":207}}},{"hash":"8134870f93ecc8f33384e89bf48fc3388c74b534","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"91e82e75f95635984fc65caced81f9ad764be72e","isMergeCommit":false,"messageTitle":"Modify JAR launcher","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3}}},{"hash":"5cd37e92e933085534c1eed03a2a192bde4cc175","isMergeCommit":false,"messageTitle":"Modify start point of JAR Launcher","messageBody":"JAR launcher was using Oscar.java as the start point before GUI was added.\n\nAfter adding Javafx for Oscar to have GUI, mainClass.set() in build.gradle needs to have the updated start point launcher file. We use Launcher.java instead of Oscar.java with Javafx.\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3}}},{"hash":"ae8e38bd64df8dcba4a08e31e6cf0a2cced0ccc1","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Code did not contain assertions previously.\n\nAdding assertions to the code help to verify the programme\u0027s runtime\nstate and assumptions.\n\nAssertions have been added liberally as per requirements. Added\nassertions are mostly used to ensure that method parameters\nare not null.\n","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}}]},{"date":"2023-09-13","commitResults":[{"hash":"e1ecf122a0f88b0a9bd08a079242daa998dc41b5","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":78}}},{"hash":"ab1c9331f5fb7de39f1fd51b313bdb220130c8cf","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Cikguseven/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"19f49e4090c4756ffb169174c36948b14b72c501","isMergeCommit":true,"messageTitle":"Add assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"50eab3289176a3fb5ee810ef7c8d0e7443e10c83","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Cikguseven/branch-A-Assertions","messageBody":"Added assertions to the code to verify the programme\u0027s runtime state and assumptions.\r\n","fileTypesAndContributionMap":{}},{"hash":"3b6046ae074bfd8c1b986d8d79461e1881eb87ce","isMergeCommit":false,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"a5aefb1436eceded2269a8253226a57bf33068d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Cikguseven/ip","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"d6c9b61c4851ee450dab54179f728aff89f74558","isMergeCommit":false,"messageTitle":"Add Note feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":441,"deletions":330}}},{"hash":"3ab2a7b340b4f9ae777358a2f45b617cf7fad6b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-D-Notes\u0027","messageBody":"","tags":["D-Notes","BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"35060673e4952a0cbc01c15b44fabb5302d7679d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":17}}}]},{"date":"2023-09-17","commitResults":[{"hash":"123ffaeacc68ac6fd0f981ce95ec81fede7d16a0","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2},"md":{"insertions":82,"deletions":13}}},{"hash":"8943a415001b547c21a77ec3cb47860cac91c03a","isMergeCommit":false,"messageTitle":"Update user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"b81230f385c55c63dafb5fc9ae43b0d48dfc2d5b","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":8}}},{"hash":"75daf4455cb64d9207d63d7cc924bbf824afb394","isMergeCommit":false,"messageTitle":"Release","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Cikguseven":{"java":1523,"md":107,"fxml":50,"sh":1,"bat":1,"gradle":23,"txt":7}},"authorContributionVariance":{"Cikguseven":140736.16},"authorDisplayNameMap":{"Cikguseven":"CS2103T-T11-1 KIER.. WEI"}} diff --git a/PearlynnT_ip_master/authorship.json b/PearlynnT_ip_master/authorship.json index da0c8684..dca05323 100644 --- a/PearlynnT_ip_master/authorship.json +++ b/PearlynnT_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"# duke.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":"PearlynnT"},"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-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":{"PearlynnT":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":"PearlynnT"},"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":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"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":"PearlynnT"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":25,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"D | 0 | return book | 2023-06-06 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":4}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"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":"PearlynnT"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"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":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * duke.Duke class that encapsulates a personal assistant chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" private final String pathname \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" public Duke(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" * Sets the exit status of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * @param isExit The boolean value.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" public static void setExit(boolean isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" Duke.isExit \u003d isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" * Gets the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" * @return The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" public static Storage getStorage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" return Duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * Gets the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" * @return The taskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" public static TaskList getTaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" return Duke.taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" * Gets the UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @return The UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" public static Ui getUi() {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" return Duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" * Starts the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" while (!Duke.isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" Parser.parse(command, Duke.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" return Parser.parse(input, Duke.taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":181,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"PearlynnT":179,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"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":40,"author":{"gitId":"PearlynnT"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":52}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.DukeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param errorMessage The error message of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyDescriptionException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyDescriptionException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param task The task with the empty description.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyKeywordException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyKeywordException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyKeywordException class","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" public EmptyKeywordException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The search keyword cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/java/duke/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyTaskException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyTaskException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyTaskException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param command The command with the empty task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyTaskException(String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls select a task to \" + command + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceAfterException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceAfterException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceAfterException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceAfterException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space after.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceAfterException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space after typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceBeforeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceBeforeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceBeforeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceBeforeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space before.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceBeforeException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space before typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" super(description, by);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" super(description, by, isDone);","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" return \"D | \" + status + \" | \" + super.description + \" | \" + byFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":64}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The start date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /** The end date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" super(description, from);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" super(description, from, isDone);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return \"E | \" + status + \" | \" + super.description + \" | \" + fromFormat + \" - \" + toFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormat + \" to: \" + toFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public abstract class Task implements Comparable\u003cTask\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /** The status of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param date The date of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, String date) {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * @param date The date of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, String date, boolean isDone) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" * @return \"X\" to mark the task as done, or \" \" if otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" public abstract String taskStringify();","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" * Compares the tasks based on date.","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param t The task to be compared.","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @return A positive integer, zero, or negative integer if this is greater, equal, or less than t.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" public int compareTo(Task t) {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" if (this.date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" return 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" } else if (t.date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" return -1;","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" return this.date.compareTo(t.date);","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":121}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyKeywordException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceAfterException;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceBeforeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" * duke.task.TaskList class that contains the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" private final ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @param list The array of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public TaskList(Task... list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" this.list.addAll(Arrays.asList(list));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Returns the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * Returns the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" private Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" return getList().get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" * Adds a task to the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" * Deletes a task from the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" private void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * Returns the length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" * @return The length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" private int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" * @return The message after marking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" public String mark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"mark \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printMarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" * @return The message after unmarking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" public String unmark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"unmark \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" t.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printUnmarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" * Adds a todo to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" public String todo(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" if ((result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"todo \") \u0026\u0026 command.length() \u003e 4)","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" || (result.length \u003e 1 \u0026\u0026 !command.startsWith(\"todo \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" Todo todo \u003d new Todo(command.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen + 1 : \"Number of tasks is incorrect after adding a todo.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(todo, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" * Adds a deadline to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" public String deadline(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"deadline \") \u0026\u0026 command.length() \u003e 8)","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"deadline \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/by\")","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"deadline\", \"/by\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a date/time for the deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The date/time for the deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" Deadline deadline \u003d new Deadline(command.substring(9, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/by\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"PearlynnT"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen + 1 : \"Number of tasks is incorrect after adding a deadline.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(deadline, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PearlynnT"},"content":" * Adds an event to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding an event.","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PearlynnT"},"content":" public String event(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"event \") \u0026\u0026 command.length() \u003e 5)","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"event \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"event\", \"/from\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a start date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide an end date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PearlynnT"},"content":" } else if (command.contains(\"/from \") \u0026\u0026 command.contains(\"/to\")","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"/from\", \"/to\").isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The start date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The end date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":232,"author":{"gitId":"PearlynnT"},"content":" Event event \u003d new Event(command.substring(6, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/to\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"PearlynnT"},"content":" addTask(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen + 1 : \"Number of tasks is incorrect after adding an event.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":237,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(event, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":240,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"PearlynnT"},"content":" * Deletes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"PearlynnT"},"content":" * @return The message after deleting the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"PearlynnT"},"content":" public String delete(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"delete \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":262,"author":{"gitId":"PearlynnT"},"content":" deleteTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen - 1 : \"Number of tasks is incorrect after deleting a task.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":264,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDeleteTask(t, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":265,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"PearlynnT"},"content":" * Finds the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"PearlynnT"},"content":" * @return The message after finding the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"PearlynnT"},"content":" public String find(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"find \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyKeywordException();","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"PearlynnT"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"PearlynnT"},"content":" List\u003cTask\u003e tempList \u003d getList().stream().filter(t -\u003e t.getDescription().contains(keyword))","lastModifiedDate":"2023-09-11"},{"lineNumber":288,"author":{"gitId":"PearlynnT"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":289,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e matchList \u003d new ArrayList\u003c\u003e(tempList);","lastModifiedDate":"2023-09-11"},{"lineNumber":290,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printFindTask(matchList);","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyKeywordException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":297,"author":{"gitId":"PearlynnT"},"content":" * Sorts the tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":298,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":299,"author":{"gitId":"PearlynnT"},"content":" * @return The sorted list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":300,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":301,"author":{"gitId":"PearlynnT"},"content":" public String sort() {","lastModifiedDate":"2023-09-11"},{"lineNumber":302,"author":{"gitId":"PearlynnT"},"content":" Collections.sort(getList());","lastModifiedDate":"2023-09-11"},{"lineNumber":303,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printSortedTasks(getList());","lastModifiedDate":"2023-09-11"},{"lineNumber":304,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":305,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":306,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"PearlynnT"},"content":" * Returns a substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"PearlynnT"},"content":" * @param text The text to get the substring from.","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"PearlynnT"},"content":" * @param first The word before the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"PearlynnT"},"content":" * @param second The word after the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"PearlynnT"},"content":" * @return The substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"PearlynnT"},"content":" private String textBtwnWords(String text, String first, String second) {","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"PearlynnT"},"content":" return text.substring(text.indexOf(first) + first.length() + 1, text.indexOf(second));","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":317,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":317}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(description, null);","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" super(description, null, isDone);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" return \"T | \" + status + \" | \" + super.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":50}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Parser class that deals with making sense of the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" * Parses the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * @return The result of parsing the user command.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" public static String parse(String command, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" Duke.setExit(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" Duke.getStorage().saveData(Duke.getTaskList().getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().showExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printList(taskList.getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" return taskList.mark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" return taskList.unmark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return taskList.todo(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" return taskList.deadline(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" return taskList.event(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" return taskList.delete(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" return taskList.find(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"sort\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" return taskList.sort();","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" else {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":52}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Storage class that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private final String pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private boolean hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.util.Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" File f \u003d new File(pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.hasFile \u003d !f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * Checks the existence of the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public void checkFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" Path path \u003d Paths.get(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String directory \u003d path.getParent().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" String filename \u003d path.getFileName().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" File dir \u003d new File(directory);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(filename);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" dir.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * Loads data from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" * @return An array of the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" public Task[] loadData() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" checkFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" list.add(readData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" sc.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"No file found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" return list.toArray(new Task[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * Reads data from each line of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" * @param line The line in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" * @return A Task that the line represents.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" private Task readData(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" String[] data \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" String taskType \u003d data[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" boolean isDone \u003d Integer.parseInt(data[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" String description \u003d data[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Todo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Deadline(description, isDone, data[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" String[] time \u003d data[3].split(\" - \");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Event(description, isDone, time[0], time[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid task type\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" System.out.println(Duke.getUi().printDateTimeParseException());","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * Saves data to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" public void saveData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" FileWriter fileWriter \u003d new FileWriter(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" for (Task t : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" String str \u003d t.taskStringify();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" fileWriter.write(str + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" * Returns true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" * @return true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" public boolean getHasFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" return this.hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":149}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Ui class that deals with interactions with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" private static final String LINE \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Hello! I\u0027m Violet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" //return line + \"\\n\\t Hello! I\u0027m Violet\" + \"\\n\\t What can I do for you?\\n\" + line;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public String showExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @return The task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public String printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @return The marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public String printMarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as undone.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @return The unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public String printUnmarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" private String printNumTasks(int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" if (num \u003d\u003d 1 || num \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" task in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * Returns the task added to the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" * @param task The task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * @return The added task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" public String printAddTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" * Returns the task deleted from the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param task The task deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" * @return The deleted task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" public String printDeleteTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @return The task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" public String printFindTask(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list sorted by date.","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks sorted by date.","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * @return The task list sorted by date.","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" public String printSortedTasks(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the tasks in your list sorted by date:\");","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" public String printIndexOutOfBoundsException(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You don\u0027t have any task in your list. Pls add a task.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" } else if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You only have one task in your list. Pls select 1.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Pls select a task number between 1 and \" + list.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" public String printDateTimeParseException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Invalid date format. Pls provide a date in the format yyyy-MM-dd HHmm.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":158}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" VBox.vgrow\u003d\"ALWAYS\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":24}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 0 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 1 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][X] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":34}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 1 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][X] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":38}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testGetDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"borrow book\", new Todo(\"borrow book\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"return book\",","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" // event task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"project meeting\",","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" .getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" public void testGetStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // not done","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\" \", new Todo(\"borrow book\", false).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" // done","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"X\", new Todo(\"borrow book\", true).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":32}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 0 | borrow book\", new Todo(\"borrow book\", false).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 1 | borrow book\", new Todo(\"borrow book\", true).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\", false).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][X] borrow book\", new Todo(\"borrow book\", true).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":29}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"deadline return book /by 2023-09-01 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"mark1","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"mark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"event project meeting /from 2023-08-30 1400 /to 2023-08-30 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"unmark3","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"todorun","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"todobuy bread","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"deadlinemath hw","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"deadline math hw","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"deadline math hw/by","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by 2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"eventbday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":"event bday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"event bday dinner/from","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from /to","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900/to","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to 2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":"delete5","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"deadline proposal /by 30/8/23 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":47}},{"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":"PearlynnT"},"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":{"PearlynnT":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":"PearlynnT"},"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":"-"},"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":{"PearlynnT":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"# duke.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":"PearlynnT"},"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-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":{"PearlynnT":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":"PearlynnT"},"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":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"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":"PearlynnT"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":25,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"D | 0 | return book | 2023-06-06 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":4}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"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":"PearlynnT"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"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":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * duke.Duke class that encapsulates a personal assistant chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" private final String pathname \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" public Duke(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" * Sets the exit status of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * @param isExit The boolean value.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" public static void setExit(boolean isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" Duke.isExit \u003d isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" * Gets the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" * @return The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" public static Storage getStorage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" return Duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * Gets the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" * @return The taskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" public static TaskList getTaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" return Duke.taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" * Gets the UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @return The UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" public static Ui getUi() {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" return Duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" * Starts the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" while (!Duke.isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" Parser.parse(command, Duke.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" * Gets the response from the user.","lastModifiedDate":"2023-09-18"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * @param input The input from the user.","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" * @return The result of parsing the user input.","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" return Parser.parse(input, Duke.taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":183,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"PearlynnT":181,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"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":40,"author":{"gitId":"PearlynnT"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":52}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.DukeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param errorMessage The error message of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyDescriptionException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyDescriptionException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param task The task with the empty description.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyKeywordException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyKeywordException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyKeywordException class","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" public EmptyKeywordException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The search keyword cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/java/duke/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyTaskException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyTaskException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyTaskException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param command The command with the empty task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyTaskException(String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls select a task to \" + command + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceAfterException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceAfterException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceAfterException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceAfterException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space after.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceAfterException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space after typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceBeforeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceBeforeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceBeforeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceBeforeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space before.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceBeforeException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space before typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" super(description, by);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" super(description, by, isDone);","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" return \"D | \" + status + \" | \" + super.description + \" | \" + byFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":64}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The start date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /** The end date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" super(description, from);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" super(description, from, isDone);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return \"E | \" + status + \" | \" + super.description + \" | \" + fromFormat + \" - \" + toFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormat + \" to: \" + toFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public abstract class Task implements Comparable\u003cTask\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /** The status of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param date The date of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, String date) {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * @param date The date of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, String date, boolean isDone) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" this.date \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" * @return \"X\" to mark the task as done, or \" \" if otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" public abstract String taskStringify();","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" * Compares the tasks based on date.","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param t The task to be compared.","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @return A positive integer, zero, or negative integer if this is greater, equal, or less than t.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" public int compareTo(Task t) {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" if (this.date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" return 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" } else if (t.date \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" return -1;","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" return this.date.compareTo(t.date);","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":121}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyKeywordException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceAfterException;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceBeforeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" * duke.task.TaskList class that contains the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" private final ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @param list The array of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public TaskList(Task... list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" this.list.addAll(Arrays.asList(list));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Returns the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * Returns the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" private Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" return getList().get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" * Adds a task to the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" * Deletes a task from the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" private void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * Returns the length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" * @return The length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" private int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" * @return The message after marking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" public String mark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"mark \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printMarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" * @return The message after unmarking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" public String unmark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"unmark \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" t.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printUnmarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" * Adds a todo to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" public String todo(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" if ((result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"todo \") \u0026\u0026 command.length() \u003e 4)","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" || (result.length \u003e 1 \u0026\u0026 !command.startsWith(\"todo \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" Todo todo \u003d new Todo(command.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen + 1 : \"Number of tasks is incorrect after adding a todo.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(todo, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" * Adds a deadline to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" public String deadline(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"deadline \") \u0026\u0026 command.length() \u003e 8)","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"deadline \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/by\")","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"deadline\", \"/by\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a date/time for the deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The date/time for the deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" Deadline deadline \u003d new Deadline(command.substring(9, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/by\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"PearlynnT"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen + 1 : \"Number of tasks is incorrect after adding a deadline.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(deadline, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PearlynnT"},"content":" * Adds an event to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding an event.","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PearlynnT"},"content":" public String event(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"event \") \u0026\u0026 command.length() \u003e 5)","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"event \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"event\", \"/from\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a start date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide an end date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PearlynnT"},"content":" } else if (command.contains(\"/from \") \u0026\u0026 command.contains(\"/to\")","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"/from\", \"/to\").isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The start date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The end date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":232,"author":{"gitId":"PearlynnT"},"content":" Event event \u003d new Event(command.substring(6, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/to\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"PearlynnT"},"content":" addTask(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen + 1 : \"Number of tasks is incorrect after adding an event.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":237,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(event, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":240,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"PearlynnT"},"content":" * Deletes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"PearlynnT"},"content":" * @return The message after deleting the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"PearlynnT"},"content":" public String delete(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"delete \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"PearlynnT"},"content":" int initialLen \u003d getLength();","lastModifiedDate":"2023-09-11"},{"lineNumber":262,"author":{"gitId":"PearlynnT"},"content":" deleteTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"PearlynnT"},"content":" assert getLength() \u003d\u003d initialLen - 1 : \"Number of tasks is incorrect after deleting a task.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":264,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDeleteTask(t, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":265,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"PearlynnT"},"content":" * Finds the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"PearlynnT"},"content":" * @return The message after finding the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"PearlynnT"},"content":" public String find(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"find \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyKeywordException();","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"PearlynnT"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"PearlynnT"},"content":" List\u003cTask\u003e tempList \u003d getList().stream().filter(t -\u003e t.getDescription().contains(keyword))","lastModifiedDate":"2023-09-11"},{"lineNumber":288,"author":{"gitId":"PearlynnT"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":289,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e matchList \u003d new ArrayList\u003c\u003e(tempList);","lastModifiedDate":"2023-09-11"},{"lineNumber":290,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printFindTask(matchList);","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyKeywordException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":297,"author":{"gitId":"PearlynnT"},"content":" * Sorts the tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":298,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":299,"author":{"gitId":"PearlynnT"},"content":" * @return The sorted list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":300,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":301,"author":{"gitId":"PearlynnT"},"content":" public String sort() {","lastModifiedDate":"2023-09-11"},{"lineNumber":302,"author":{"gitId":"PearlynnT"},"content":" Collections.sort(getList());","lastModifiedDate":"2023-09-11"},{"lineNumber":303,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printSortedTasks(getList());","lastModifiedDate":"2023-09-11"},{"lineNumber":304,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":305,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":306,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"PearlynnT"},"content":" * Returns a substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"PearlynnT"},"content":" * @param text The text to get the substring from.","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"PearlynnT"},"content":" * @param first The word before the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"PearlynnT"},"content":" * @param second The word after the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"PearlynnT"},"content":" * @return The substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"PearlynnT"},"content":" private String textBtwnWords(String text, String first, String second) {","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"PearlynnT"},"content":" return text.substring(text.indexOf(first) + first.length() + 1, text.indexOf(second));","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":317,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":317}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(description, null);","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" super(description, null, isDone);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" return \"T | \" + status + \" | \" + super.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":50}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Parser class that deals with making sense of the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" * Parses the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * @return The result of parsing the user command.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" public static String parse(String command, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" Duke.setExit(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" Duke.getStorage().saveData(Duke.getTaskList().getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().showExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printList(taskList.getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" return taskList.mark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" return taskList.unmark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return taskList.todo(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" return taskList.deadline(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" return taskList.event(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" return taskList.delete(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" return taskList.find(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"sort\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" return taskList.sort();","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":51}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Storage class that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private final String pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private boolean hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.util.Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" File f \u003d new File(pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.hasFile \u003d !f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * Checks the existence of the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public void checkFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" Path path \u003d Paths.get(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String directory \u003d path.getParent().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" String filename \u003d path.getFileName().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" File dir \u003d new File(directory);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(filename);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" dir.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * Loads data from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" * @return An array of the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" public Task[] loadData() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" checkFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" list.add(readData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" sc.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"No file found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" return list.toArray(new Task[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * Reads data from each line of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" * @param line The line in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" * @return A Task that the line represents.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" private Task readData(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" String[] data \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" String taskType \u003d data[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" boolean isDone \u003d Integer.parseInt(data[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" String description \u003d data[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Todo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Deadline(description, isDone, data[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" String[] time \u003d data[3].split(\" - \");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Event(description, isDone, time[0], time[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid task type\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" System.out.println(Duke.getUi().printDateTimeParseException());","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * Saves data to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" public void saveData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" FileWriter fileWriter \u003d new FileWriter(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" for (Task t : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" String str \u003d t.taskStringify();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" fileWriter.write(str + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" * Returns true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" * @return true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" public boolean getHasFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" return this.hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":149}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Ui class that deals with interactions with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" private static final String LINE \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Hello! I\u0027m Violet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" public String showExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @return The task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" public String printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" * @return The marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" public String printMarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as undone.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * @return The unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" public String printUnmarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" private String printNumTasks(int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" if (num \u003d\u003d 1 || num \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" task in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" * Returns the task added to the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" * @param task The task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * @return The added task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" public String printAddTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" * Returns the task deleted from the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" * @param task The task deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @return The deleted task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" public String printDeleteTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" * @return The task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" public String printFindTask(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list sorted by date.","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks sorted by date.","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" * @return The task list sorted by date.","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" public String printSortedTasks(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the tasks in your list sorted by date:\");","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" public String printIndexOutOfBoundsException(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You don\u0027t have any task in your list. Pls add a task.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" } else if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You only have one task in your list. Pls select 1.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Pls select a task number between 1 and \" + list.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" public String printDateTimeParseException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Invalid date format. Pls provide a date in the format yyyy-MM-dd HHmm.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":157}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"\u003cfx:root alignment\u003d\"CENTER_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"2.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003cLabel fx:id\u003d\"dialog\" lineSpacing\u003d\"1.0\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" style\u003d\"-fx-background-color: #99E1D9; -fx-text-fill: black; -fx-background-radius: 10;","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" -fx-label-padding: 1;\" text\u003d\"Label\" textAlignment\u003d\"JUSTIFY\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" \u003cCircle centerX\u003d\"25.0\" centerY\u003d\"25.0\" radius\u003d\"25.0\" /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":35}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" prefWidth\u003d\"400.0\" stylesheets\u003d\"@application.css\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" style\u003d\"-fx-background-color: #5D576B; -fx-text-fill: white; -fx-background-radius: 10\"","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-button-padding: 1; -fx-background-color: #99E1D9;","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" -fx-text-fill: black; -fx-background-radius: 10;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" VBox.vgrow\u003d\"ALWAYS\"","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" style\u003d\"-fx-background-color: #FFFAE3;\" /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":27}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 0 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 1 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][X] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":34}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 1 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][X] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":38}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testGetDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"borrow book\", new Todo(\"borrow book\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"return book\",","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" // event task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"project meeting\",","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" .getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" public void testGetStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // not done","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\" \", new Todo(\"borrow book\", false).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" // done","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"X\", new Todo(\"borrow book\", true).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":32}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 0 | borrow book\", new Todo(\"borrow book\", false).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 1 | borrow book\", new Todo(\"borrow book\", true).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\", false).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][X] borrow book\", new Todo(\"borrow book\", true).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":29}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"deadline return book /by 2023-09-01 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"mark1","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"mark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"event project meeting /from 2023-08-30 1400 /to 2023-08-30 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"unmark3","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"todorun","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"todobuy bread","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"deadlinemath hw","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"deadline math hw","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"deadline math hw/by","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by 2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"eventbday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":"event bday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"event bday dinner/from","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from /to","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900/to","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to 2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":"delete5","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"deadline proposal /by 30/8/23 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":47}},{"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":"PearlynnT"},"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":{"PearlynnT":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":"PearlynnT"},"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":"-"},"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":{"PearlynnT":1,"-":37}}] diff --git a/PearlynnT_ip_master/commits.json b/PearlynnT_ip_master/commits.json index ad076131..282a05b1 100644 --- a/PearlynnT_ip_master/commits.json +++ b/PearlynnT_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"PearlynnT":[{"date":"2023-08-21","commitResults":[{"hash":"19e3bbf801008a00e1ff036825f080f21c902ac3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"1f276dcaf74bdcb7ec0c03f300a4cc69e7573666","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"edce9ed30859b0672cd9461cbd7a0074b76c142e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25c48ca930d9b9a406e661ced303506ea914d82f","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"144e7eeaa8a38c86171c1c75ebda1bd5c477dbad","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":13}}},{"hash":"ae423649a70c14fb1dc30450a92d7f831ab0dfb1","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"a98486322ffbf51301a49a0238f163c44024d9a4","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6d64553341a06af0799ec3b47d2e5051919f2523","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":50}}},{"hash":"2d26cbb6b07fc924035b176a45dedb8f3c9d9b64","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":22,"deletions":0},"java":{"insertions":4,"deletions":0}}},{"hash":"61158ac89d42e3d606ac068de2171ab0df4cce66","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":34,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"657f618b5c5edce045696de3fe9c4b6b800cd566","isMergeCommit":false,"messageTitle":"doc","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2740e6be5ae77ebb71f4bb3d8752d957a825868b","isMergeCommit":false,"messageTitle":"Add exception classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":100,"deletions":29}}},{"hash":"ee5810a2378adca3410eb3e59917c9d0796f48c3","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":147,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a3e0dd10ab548c3a887378cbab2ddaa56b659b16","isMergeCommit":false,"messageTitle":"Add list method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":4}}},{"hash":"347f2d136ef246d1119453825a862b907604de3a","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c06f373c5aeea876ae6634ccd066b1d1709235af","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":11},"java":{"insertions":52,"deletions":29}}},{"hash":"36e685b4b377d5271e15e224b64afa24d51d96b7","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"33b8fbd126d6d0bae3cea1c8d8fcbbb43531c61c","isMergeCommit":false,"messageTitle":"Add A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":541,"deletions":225}}},{"hash":"4907af06af8af77ef8b367054b2a67634e55c057","isMergeCommit":true,"messageTitle":"Merge branch-A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c07bdbf9d4de5888df4693f5cb5b20436c24994e","isMergeCommit":false,"messageTitle":"Add A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":29},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3a9800086258a6c2ccfcd369d1e424af6a53d4f2","isMergeCommit":true,"messageTitle":"Merge branch-A-packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f42fa8d1fdc0f0cd53db4098aeaae777a2b5194f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"0a20d639ae9b533c01fc48af8d84926e9a2a76d9","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"81989a509a64917e183c7342707e1a556288e9bb","isMergeCommit":false,"messageTitle":"Add A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":118,"deletions":85},"sh":{"insertions":1,"deletions":1}}},{"hash":"eb075afc727a6416afa9aea9e12aee1bbf256254","isMergeCommit":false,"messageTitle":"Add A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":0}}},{"hash":"3289678987a850e16526abd5cbd373cd3a2e4581","isMergeCommit":false,"messageTitle":"Add A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"c9607dbd5656b064b70e171c01f39b8453ff4abd","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"274b3ef3051e5dcab5cfe013cae7afca8260ba16","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"605f30743bc619f5cbaabe064b08d2b382b17dea","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"7c9e8aba9849c35aff9e634c4ba85a9dba27b8bc","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":4}}},{"hash":"7625a67fda82dca88c5b952583aebc551d8d2a7f","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"d361bae27ff1563a2bc5ea47f24da1bb95cb0f26","isMergeCommit":true,"messageTitle":"branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a95e746e8dba2d56d1042a075030781161a37d1b","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"54672678d74125a4b0d3227eacd0093e2837ae56","isMergeCommit":false,"messageTitle":"Change import order","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"729d7e751aa33f928f9384755628273a839f3c17","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca7c13196421128ae3be6644a555ee52c5a92c3c","isMergeCommit":false,"messageTitle":"Add Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":416,"deletions":109}}},{"hash":"0a783a783df0b86611b4f77b10d6baaa580ba3eb","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":19}}},{"hash":"dbaaee02d8f42ea3be92ceaac6271ff8ee018967","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"db9e28ba3d56866736de1af8cf4c5602147963d1","isMergeCommit":false,"messageTitle":"Add varargs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":14}}},{"hash":"3da1fec6f2d8d94db14073705fc8ee28d087fab4","isMergeCommit":true,"messageTitle":"Merge branch-A-Varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"27c7a448bd2f3bb3be273b85b6a80cb01672fb46","isMergeCommit":false,"messageTitle":"Add A-Assertions","messageBody":"Use assert feature to document important assumptions that should hold at various points in the code.\n\nAdd assertion to verify assumptions to todo, deadline, event, delete when the methods are invoked.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":0}}},{"hash":"82ee79a5373eb198392cb8f1af2be48bb4b5c458","isMergeCommit":false,"messageTitle":"Add A-CodeQuality","messageBody":"Examine the code and refactor to improve the code quality where necessary.\n\nDelete unnecessary comments.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"d90a08d549a3c013e76518612fe09f23465b7303","isMergeCommit":false,"messageTitle":"Add A-Streams","messageBody":"Use the Streams feature of Java in my code.\n\nAdd Streams to find method.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"4e96f3b5df1156abfaa678a79e32817d438c37f0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from PearlynnT/branch-A-Assertions","messageBody":"Add A-Assertions","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"e2aef799b9e5d781a1139947b4e5be87225ecfe0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from PearlynnT/branch-A-CodeQuality","messageBody":"Add code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e71865bb395bc4b2f934141c0d9fbc21e1aed858","isMergeCommit":true,"messageTitle":"Merge pull request #3 from PearlynnT/branch-A-Streams","messageBody":"Add streams","tags":["A-Streams"],"fileTypesAndContributionMap":{}},{"hash":"3e80e18599e8cc600cde92454f64c32e1bb62da5","isMergeCommit":false,"messageTitle":"Add C-Sort","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":10}}},{"hash":"876f11a24b6318f6eded2df283ec8ff6e9911ee2","isMergeCommit":true,"messageTitle":"Merge pull request #4 from PearlynnT/branch-C-Sort","messageBody":"Add C-Sort","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"PearlynnT":{"java":1563,"md":2,"fxml":41,"sh":1,"bat":1,"gradle":25,"txt":51}},"authorContributionVariance":{"PearlynnT":81208.16},"authorDisplayNameMap":{"PearlynnT":"CS2103T-F12-2 PEAR..YING"}} +{"authorDailyContributionsMap":{"PearlynnT":[{"date":"2023-08-21","commitResults":[{"hash":"19e3bbf801008a00e1ff036825f080f21c902ac3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"1f276dcaf74bdcb7ec0c03f300a4cc69e7573666","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"edce9ed30859b0672cd9461cbd7a0074b76c142e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25c48ca930d9b9a406e661ced303506ea914d82f","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"144e7eeaa8a38c86171c1c75ebda1bd5c477dbad","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":13}}},{"hash":"ae423649a70c14fb1dc30450a92d7f831ab0dfb1","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"a98486322ffbf51301a49a0238f163c44024d9a4","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6d64553341a06af0799ec3b47d2e5051919f2523","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":50}}},{"hash":"2d26cbb6b07fc924035b176a45dedb8f3c9d9b64","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":22,"deletions":0},"java":{"insertions":4,"deletions":0}}},{"hash":"61158ac89d42e3d606ac068de2171ab0df4cce66","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":34,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"657f618b5c5edce045696de3fe9c4b6b800cd566","isMergeCommit":false,"messageTitle":"doc","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2740e6be5ae77ebb71f4bb3d8752d957a825868b","isMergeCommit":false,"messageTitle":"Add exception classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":100,"deletions":29}}},{"hash":"ee5810a2378adca3410eb3e59917c9d0796f48c3","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":147,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a3e0dd10ab548c3a887378cbab2ddaa56b659b16","isMergeCommit":false,"messageTitle":"Add list method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":4}}},{"hash":"347f2d136ef246d1119453825a862b907604de3a","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c06f373c5aeea876ae6634ccd066b1d1709235af","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":11},"java":{"insertions":52,"deletions":29}}},{"hash":"36e685b4b377d5271e15e224b64afa24d51d96b7","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"33b8fbd126d6d0bae3cea1c8d8fcbbb43531c61c","isMergeCommit":false,"messageTitle":"Add A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":541,"deletions":225}}},{"hash":"4907af06af8af77ef8b367054b2a67634e55c057","isMergeCommit":true,"messageTitle":"Merge branch-A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c07bdbf9d4de5888df4693f5cb5b20436c24994e","isMergeCommit":false,"messageTitle":"Add A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":29},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3a9800086258a6c2ccfcd369d1e424af6a53d4f2","isMergeCommit":true,"messageTitle":"Merge branch-A-packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f42fa8d1fdc0f0cd53db4098aeaae777a2b5194f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"0a20d639ae9b533c01fc48af8d84926e9a2a76d9","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"81989a509a64917e183c7342707e1a556288e9bb","isMergeCommit":false,"messageTitle":"Add A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":118,"deletions":85},"sh":{"insertions":1,"deletions":1}}},{"hash":"eb075afc727a6416afa9aea9e12aee1bbf256254","isMergeCommit":false,"messageTitle":"Add A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":0}}},{"hash":"3289678987a850e16526abd5cbd373cd3a2e4581","isMergeCommit":false,"messageTitle":"Add A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"c9607dbd5656b064b70e171c01f39b8453ff4abd","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"274b3ef3051e5dcab5cfe013cae7afca8260ba16","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"605f30743bc619f5cbaabe064b08d2b382b17dea","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"7c9e8aba9849c35aff9e634c4ba85a9dba27b8bc","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":4}}},{"hash":"7625a67fda82dca88c5b952583aebc551d8d2a7f","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"d361bae27ff1563a2bc5ea47f24da1bb95cb0f26","isMergeCommit":true,"messageTitle":"branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a95e746e8dba2d56d1042a075030781161a37d1b","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"54672678d74125a4b0d3227eacd0093e2837ae56","isMergeCommit":false,"messageTitle":"Change import order","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"729d7e751aa33f928f9384755628273a839f3c17","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca7c13196421128ae3be6644a555ee52c5a92c3c","isMergeCommit":false,"messageTitle":"Add Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":416,"deletions":109}}},{"hash":"0a783a783df0b86611b4f77b10d6baaa580ba3eb","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":19}}},{"hash":"dbaaee02d8f42ea3be92ceaac6271ff8ee018967","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"db9e28ba3d56866736de1af8cf4c5602147963d1","isMergeCommit":false,"messageTitle":"Add varargs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":14}}},{"hash":"3da1fec6f2d8d94db14073705fc8ee28d087fab4","isMergeCommit":true,"messageTitle":"Merge branch-A-Varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"27c7a448bd2f3bb3be273b85b6a80cb01672fb46","isMergeCommit":false,"messageTitle":"Add A-Assertions","messageBody":"Use assert feature to document important assumptions that should hold at various points in the code.\n\nAdd assertion to verify assumptions to todo, deadline, event, delete when the methods are invoked.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":0}}},{"hash":"82ee79a5373eb198392cb8f1af2be48bb4b5c458","isMergeCommit":false,"messageTitle":"Add A-CodeQuality","messageBody":"Examine the code and refactor to improve the code quality where necessary.\n\nDelete unnecessary comments.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"d90a08d549a3c013e76518612fe09f23465b7303","isMergeCommit":false,"messageTitle":"Add A-Streams","messageBody":"Use the Streams feature of Java in my code.\n\nAdd Streams to find method.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"4e96f3b5df1156abfaa678a79e32817d438c37f0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from PearlynnT/branch-A-Assertions","messageBody":"Add A-Assertions","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"e2aef799b9e5d781a1139947b4e5be87225ecfe0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from PearlynnT/branch-A-CodeQuality","messageBody":"Add code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e71865bb395bc4b2f934141c0d9fbc21e1aed858","isMergeCommit":true,"messageTitle":"Merge pull request #3 from PearlynnT/branch-A-Streams","messageBody":"Add streams","tags":["A-Streams"],"fileTypesAndContributionMap":{}},{"hash":"3e80e18599e8cc600cde92454f64c32e1bb62da5","isMergeCommit":false,"messageTitle":"Add C-Sort","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":10}}},{"hash":"876f11a24b6318f6eded2df283ec8ff6e9911ee2","isMergeCommit":true,"messageTitle":"Merge pull request #4 from PearlynnT/branch-C-Sort","messageBody":"Add C-Sort","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"bdba41befc8a1c6fd06be0676cd784f7a616381c","isMergeCommit":false,"messageTitle":"Improve GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":7},"java":{"insertions":5,"deletions":5}}},{"hash":"00fec4488f056eed77bb2e448ff2d29193fbda77","isMergeCommit":true,"messageTitle":"Merge pull request #6 from PearlynnT/branch-A-BetterGui","messageBody":"Improve GUI","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"PearlynnT":{"java":1563,"md":2,"fxml":62,"sh":1,"bat":1,"gradle":25,"txt":51}},"authorContributionVariance":{"PearlynnT":65741.44},"authorDisplayNameMap":{"PearlynnT":"CS2103T-F12-2 PEAR..YING"}} diff --git a/Propene-Dan_ip_master/authorship.json b/Propene-Dan_ip_master/authorship.json index fbd17cb1..206ce26b 100644 --- a/Propene-Dan_ip_master/authorship.json +++ b/Propene-Dan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"# Veneto project template","lastModifiedDate":"2023-09-14"},{"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":"Propene-Dan"},"content":"3. After that, locate the `src/main/java/veneto.Veneto.java` file, right-click it, and choose `Run veneto.Veneto.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-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" ___ ___ __________ ___ ___ __________ __________ __________","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" \\ \\ / /| _______|| \\ | || _______||___ ___|| ____ |","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" \\ \\ / / | |_______ | \\| || |_______ | | | | | |","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" \\ \\/ / | _______|| || _______| | | | | | |","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" \\ / | |_______ | |\\ || |_______ | | | |____| |","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" \\__/ |__________||___| \\___||__________| |__| |__________|","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" ","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":17,"Propene-Dan":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":"Propene-Dan"},"content":" mainClass.set(\"veneto.Veneto\")","lastModifiedDate":"2023-09-16"},{"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":"Propene-Dan"},"content":" archiveBaseName \u003d \"veneto\"","lastModifiedDate":"2023-09-16"},{"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":"Propene-Dan"},"content":" //archiveFileName \u003d \u0027veneto-v1.0.0.jar\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-16"},{"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":{"-":40,"Propene-Dan":4}},{"path":"src/main/java/veneto/Veneto.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.ExitCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import veneto.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"public class Veneto {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" private Storage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" public Veneto(String filePath) {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" } catch (DanException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" storage.init(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" new Veneto(\"data/dan.txt\").run();","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" public void run() {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" ui.hello();","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" chat();","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" private void chat() {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" command \u003d ui.getCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" command.op(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" storage.checkChange(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" ui.afterCommand(command, tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" } catch (DanException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Propene-Dan":57}},{"path":"src/main/java/veneto/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanOperateException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"add\";","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" private String text;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" private int id;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" private Task newTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public AddCommand(Task t) {","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" this.newTask \u003d t;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) throws DanException {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" throw new DanOperateException(\"Add\");","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" return newTask.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" public static String getType() {","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":40}},{"path":"src/main/java/veneto/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public abstract void op(TaskList tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" public static String getType() {return null;}","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":9}},{"path":"src/main/java/veneto/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"delete\";","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" private int taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" private Task removedTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" public DeleteCommand(int taskId) {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" removedTask \u003d tasks.remove(taskId-1);","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" return removedTask.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" public static String getType() {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":34}},{"path":"src/main/java/veneto/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"exit\";","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) {}","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" public static String getType() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":21}},{"path":"src/main/java/veneto/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"list\";","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) {}","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" public static String getType() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":21}},{"path":"src/main/java/veneto/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"add\";","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" private int taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" * This variable indicates if the function is \"mark()\" or \"unmark()\"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" * funcId \u003d\u003d 1 -\u003e mark() ; funcId \u003d 0 -\u003e unmark()","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" private int funcId;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" private Task currTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" public MarkCommand(int taskId, int funcId) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" this.funcId \u003d funcId;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) throws DanException {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" currTask \u003d tasks.get(taskId - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" currTask.mark(funcId);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" return currTask.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" public static String getType() {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":42}},{"path":"src/main/java/veneto/exceptions/DanException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.exceptions;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class DanException extends InputMismatchException {","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public DanException(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" super(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Propene-Dan":10}},{"path":"src/main/java/veneto/exceptions/DanOperateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.exceptions;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class DanOperateException extends DanException {","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":" public DanOperateException(String s) {","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" super(s);","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Propene-Dan":7}},{"path":"src/main/java/veneto/exceptions/DanStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.exceptions;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class DanStorageException extends DanException{","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" public DanStorageException(String s) {","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" super(s);","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Propene-Dan":8}},{"path":"src/main/java/veneto/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Event;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"public class Parser {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" public static Command translateCommand(String text) {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" String[] texts \u003d text.split(\" \");","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" String command \u003d texts[0].toLowerCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" switch (command) {","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" case \"bye\":","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" case \"list\":","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" case \"mark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" return new MarkCommand(Integer.parseInt(texts[1]), 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" return new MarkCommand(Integer.parseInt(texts[1]), 0);","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" case \"todo\":","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" return prepareAdd(text, 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" return prepareAdd(text, 2);","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" case \"event\":","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" return prepareAdd(text, 3);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" return new DeleteCommand(Integer.parseInt(texts[1]));","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" throw new DanException(\"Invalid Command\");","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" private static Command prepareAdd(String text, int id) {","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" String[] texts \u003d text.split(\"/\");","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c texts.length; i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" texts[i] \u003d texts[i].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" String description;","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" switch (id) {","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" case 1:","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" description \u003d texts[0].substring(5);","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" case 2:","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" description \u003d texts[0].substring(9);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" String deadline \u003d texts[1].substring(3);","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" newTask \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" case 3:","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" description \u003d texts[0].substring(5);","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" String start \u003d texts[1].substring(5);","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" String end \u003d texts[2].substring(3);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" newTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" return new AddCommand(newTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":63}},{"path":"src/main/java/veneto/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanStorageException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import java.io.*;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"public class Storage {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" private String savePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" private Writer writer;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" /** Constructors */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" public Storage(String savePath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" this.savePath \u003d savePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" public void init(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" new File(\"./data\").mkdir();","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" new File(savePath).createNewFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" throw new DanException(\"一般来讲这个不可能发生的\");","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" public TaskList load() throws DanException {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d new TaskList(100);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" File f \u003d new File(savePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" sc \u003d new Scanner(f);","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" String text;","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" text \u003d sc.nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" addTask(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" return tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" throw new DanStorageException(\"No Storage Found\");","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" } finally {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" sc.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" public void addTask(String text) throws DanException {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" String[] task \u003d text.split(\",\");","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" Task t \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" int isDone \u003d Integer.parseInt(task[2]);","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" switch (task[0]) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" case \"toDo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" t \u003d new ToDo(task[1], isDone);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" t \u003d new Deadline(task[1], isDone, task[3]);","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" t \u003d new Event(task[1], isDone, task[3], task[4]);","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException | NullPointerException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":" throw new DanStorageException(\"Storage File Destroyed\");","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"Propene-Dan"},"content":" public void checkChange(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"Propene-Dan"},"content":" if (tasks.storageChanged \u003d\u003d 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"Propene-Dan"},"content":" save();","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"Propene-Dan"},"content":" public void save() {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"Propene-Dan"},"content":" new File(savePath).delete();","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"Propene-Dan"},"content":" new File(savePath).createNewFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"Propene-Dan"},"content":" writer \u003d new BufferedWriter(new FileWriter(savePath));","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"Propene-Dan"},"content":" writer.write(tasks.get(i).saveToString() + \"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"Propene-Dan"},"content":" throw new DanException(\"一般来讲不会发生的\");","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Propene-Dan"},"content":" } finally {","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"Propene-Dan"},"content":" writer.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"Propene-Dan"},"content":" throw new DanException(\"一般来讲也不会发生的,但是万一发生了也保不准\");","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":97}},{"path":"src/main/java/veneto/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" // fields","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" // toString","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" return \"[D]\" + super.toString() +","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" \" (by: \" + deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))+ \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" return \"deadline,\" + super.saveToString() + \",\" + deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" // Constructor","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" public Deadline(String description, String deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" public Deadline(String description, int mark, String deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" super(description, mark !\u003d 0);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":33}},{"path":"src/main/java/veneto/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" // fields","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" protected LocalDate start;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" protected LocalDate end;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" // toString","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" return \"[E]\" + super.toString() +","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" \" (from: \" + start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" \" to: \" + end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" return \"event,\" + super.saveToString() + \",\" + start + \",\" + end;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" // Constructor","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" this.start \u003d LocalDate.parse(start);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" this.end \u003d LocalDate.parse(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" public Event(String description, int mark, String start, String end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" super(description, mark !\u003d 0);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" this.start \u003d LocalDate.parse(start);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" this.end \u003d LocalDate.parse(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":37}},{"path":"src/main/java/veneto/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanOperateException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" // fields","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" protected String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" //Methods","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" return (isDone ? \"[V] \" : \"[ ] \"); // mark done task with V","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public void mark(int id) throws DanException {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" if (id \u003d\u003d 1) { /* to mark task */","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" if (isDone \u003d\u003d false) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" } else { /* if the task is already marked */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" throw new DanOperateException(\"Marked\");","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" } else { /* to unmark task */","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" if (isDone \u003d\u003d true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" } else { /* if the task is already unmarked */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" throw new DanOperateException(\"Unmarked\");","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" // toString","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" return getStatusIcon() + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" return this.description + \",\" + (isDone ? 1 : 0);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" // Constructor","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":50}},{"path":"src/main/java/veneto/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public int storageChanged \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" /** Constructors */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public TaskList() {}","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" public TaskList(int initialCapacity) {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" super(initialCapacity);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" StringBuffer rt \u003d new StringBuffer();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" rt.append(\" \" + (i+1) + \". \" + this.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" return rt.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Propene-Dan":25}},{"path":"src/main/java/veneto/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" // Methods","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" // toString","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" return \"toDo,\" + super.saveToString();","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" // Constructor","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" public ToDo(String des, int mark) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" super(des, mark !\u003d 0);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":27}},{"path":"src/main/java/veneto/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanOperateException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanStorageException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import veneto.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"public class Ui {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" private final static String GREETS \u003d \"\\nVeneto: \\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" private final static String[] COMMANDS \u003d new String[] {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" \"toDo [TASK]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" \"deadline [TASK] /by [DEADLINE(YYYY-MM-DD)]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" \"event [TASK] /from [START_TIME(YYYY-MM-DD)] /to [END_TIME(YYYY-MM-DD)]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" \"mark [TASK_ID]\", \"unmark [TASK_ID]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" \"list\", \"bye\"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" };","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" public static void showError(DanException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" if (e instanceof DanOperateException) {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" switch (e.getMessage()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" case \"Unmarked\":","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 这个没标记过哦!\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" return;","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" case \"Marked\":","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 这个已经做完了哦!\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" return;","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" case \"Add\":","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 输入格式不对!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(\" 你可以跟我说:\\n\" + Arrays.toString(COMMANDS) + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" } else if (e instanceof DanStorageException) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 没找到内存哦 现在重新创建一个!\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" } else if (e.getMessage().equals(\"Invalid Command\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 输入格式不对!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(\" 你可以跟我说:\\n\" + Arrays.toString(COMMANDS) + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \"???\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" public void afterCommand(Command c, TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" switch (c.getType()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" case \"exit\":","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" goodbye();","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" case \"add\":","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 记下来了:\\n \" + c +","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" \"!\\n 现在有\" + tasks.size() + \"项任务要做\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" case \"list\":","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 还有这些要做哦!\\n\" +","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" tasks.toString() + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":" case \"mark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 我这就帮您标记好!\\n \" + c + \"\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Propene-Dan"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 啊 没关系 帮您擦掉标记了哦\" + \"\\n \" + c + \"\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Propene-Dan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"Propene-Dan"},"content":" GREETS +","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"Propene-Dan"},"content":" \" 好啦,帮你擦掉了一条任务哦:\\n \" + c +","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"Propene-Dan"},"content":" \"\\n 现在还剩下\" + tasks.size() + \"项任务\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"Propene-Dan"},"content":" public Command getCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"Propene-Dan"},"content":" String text \u003d new Scanner(System.in).nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"Propene-Dan"},"content":" return Parser.translateCommand(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"Propene-Dan"},"content":" public void hello() {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"Propene-Dan"},"content":" GREETS +","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"Propene-Dan"},"content":" \" VV为您服务\\n\" +","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"Propene-Dan"},"content":" \" 有什么可以要帮忙可以跟我说!\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"Propene-Dan"},"content":" public void goodbye() {","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"Propene-Dan"},"content":" GREETS +","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"Propene-Dan"},"content":" \" 拜拜啦 下次见\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":104}},{"path":"src/test/java/veneto/VenetoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"public class VenetoTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":21}},{"path":"src/test/java/veneto/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class AddCommandTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void op() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" void testToString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void getType() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":20}},{"path":"src/test/java/veneto/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class MarkCommandTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void op() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" void testToString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void getType() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":20}},{"path":"src/test/java/veneto/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class EventTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" \"[E][ ] a (from: Sep 10 2019 to: Sep 11 2019)\",","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", \"2019-09-10\", \"2019-09-11\").toString()","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" \"[E][V] a (from: Sep 10 2019 to: Sep 11 2019)\",","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", 1, \"2019-09-10\", \"2019-09-11\").toString()","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" \"event,a,0,2019-09-10,2019-09-11\",","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", \"2019-09-10\", \"2019-09-11\").saveToString()","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" \"event,a,1,2019-09-10,2019-09-11\",","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", 1, \"2019-09-10\", \"2019-09-11\").saveToString()","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":40}},{"path":"src/test/java/veneto/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class ToDoTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"[T][ ] a\", new ToDo(\"a\").toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"[T][V] a\", new ToDo(\"a\", 1).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"toDo,a,0\", new ToDo(\"a\").saveToString());","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"toDo,a,1\", new ToDo(\"a\", 1).saveToString());","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":28}},{"path":"src/test/java/veneto/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanOperateException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"class UiTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"// @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"// void showError_unmarkedOperateException_writtenCorrectly() {","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"// assertEquals(\"\\nVeneto: \\n 这个没标记过哦!\\n\", Ui.showError(new DanOperateException(\"Unmarked\")));","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"// }","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" void afterCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" void getCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" void goodbye() {","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"todo borrow book","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"deadline return book /by 2019-08-10","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"event project meeting /from 2020-05-09 /to 2020-05-10","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"list","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"mark 1","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"mark 3","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"unmark 3","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"unmark 2","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"list","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"delete 3","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"Bye","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Propene-Dan":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":"-"},"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":"Propene-Dan"},"content":"java -classpath ..\\bin veneto.Veneto \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-16"},{"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,"Propene-Dan":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":"-"},"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":"Propene-Dan"},"content":"java -classpath ../bin Dan \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-08"},{"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":{"-":37,"Propene-Dan":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"# Veneto project template","lastModifiedDate":"2023-09-14"},{"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":"Propene-Dan"},"content":"3. After that, locate the `src/main/java/veneto.Veneto.java` file, right-click it, and choose `Run veneto.Veneto.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-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" ___ ___ __________ ___ ___ __________ __________ __________","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" \\ \\ / /| _______|| \\ | || _______||___ ___|| ____ |","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" \\ \\ / / | |_______ | \\| || |_______ | | | | | |","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" \\ \\/ / | _______|| || _______| | | | | | |","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" \\ / | |_______ | |\\ || |_______ | | | |____| |","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" \\__/ |__________||___| \\___||__________| |__| |__________|","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" ","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":17,"Propene-Dan":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":"Propene-Dan"},"content":" mainClass.set(\"veneto.Veneto\")","lastModifiedDate":"2023-09-16"},{"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":"Propene-Dan"},"content":" archiveBaseName \u003d \"veneto\"","lastModifiedDate":"2023-09-16"},{"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":"Propene-Dan"},"content":" //archiveFileName \u003d \u0027veneto-v1.0.0.jar\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-16"},{"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":{"-":40,"Propene-Dan":4}},{"path":"src/main/java/veneto/Veneto.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.ExitCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import veneto.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"public class Veneto {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" private Storage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" * this constructor init Veneto","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" * @param filePath the path of data stored","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" public Veneto(String filePath) {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" } catch (VenetoException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" storage.init(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" * creates Veneto and run it","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" * @param args the path of data stored","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" new Veneto(\"data/dan.txt\").run();","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" * run Veneto","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" public void run() {","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" ui.hello();","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" chat();","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" * recursively chat with user","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" private void chat() {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" command \u003d ui.getCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" command.op(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" storage.checkChange(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" ui.afterCommand(command, tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" } catch (VenetoException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Propene-Dan":68}},{"path":"src/main/java/veneto/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoOperateException;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"add\";","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" private String text;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" private int id;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" private Task newTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public AddCommand(Task t) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" this.newTask \u003d t;","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" * the AddCommand operates","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList where the AddCommand put new task","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) throws VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoOperateException(\"Add\");","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" * @return the String representation of the task added to the TaskList","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" return newTask.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":51}},{"path":"src/main/java/veneto/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" * the Command operates","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList that the Command operates on","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public abstract void op(TaskList tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {return null;}","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":16}},{"path":"src/main/java/veneto/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"delete\";","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" private int taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" private Task removedTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" public DeleteCommand(int taskId) {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" * the DeleteCommand operates","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList that the DeleteCommand operates on","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" removedTask \u003d tasks.remove(taskId-1);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" * @return the String representation of the task removed to the TaskList","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" return removedTask.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":44}},{"path":"src/main/java/veneto/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"exit\";","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" * the ExitCommand operates","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList of Veneto","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) {}","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":28}},{"path":"src/main/java/veneto/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoOperateException;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"find\";","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" private String keyword;","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" private TaskList foundTasks;","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" * creates a find command","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" * @param keyword contained in the task which should be found","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" this.foundTasks \u003d new TaskList();","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" * the FindCommand operates","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList where the Command search from","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" * @throws VenetoException","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) throws VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" Task currTask \u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" currTask \u003d tasks.get(i);","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" if (currTask.contains(keyword)) {","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" foundTasks.add(currTask);","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" if (foundTasks.isEmpty()) {","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" throw new NullPointerException();","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoOperateException(\"Not Found\");","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" * @return the tasks found","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" return foundTasks.toString();","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"Propene-Dan":63}},{"path":"src/main/java/veneto/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"list\";","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" * the ListCommand operates","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList that the ListCommand shows","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) {}","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":28}},{"path":"src/main/java/veneto/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" public static final String type \u003d \"add\";","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" private int taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" * This variable indicates if the function is \"mark()\" or \"unmark()\"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" * funcId \u003d\u003d 1 -\u003e mark() ; funcId \u003d 0 -\u003e unmark()","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" private int funcId;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" private Task currTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" /* Constructor */","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" public MarkCommand(int taskId, int funcId) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" super();","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" this.funcId \u003d funcId;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" * the MarkCommand operates","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList that the MarkCommand operates on","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" public void op(TaskList tasks) throws VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" currTask \u003d tasks.get(taskId - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" currTask.mark(funcId);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" * @return the String representation of the task marked or unmarked","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" return currTask.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" * @return the type of the Command","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" public String getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" return type;","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":52}},{"path":"src/main/java/veneto/exceptions/VenetoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.exceptions;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class VenetoException extends RuntimeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" * Exception that may occur when Veneto runs","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" * @param s the message of the exception","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" public VenetoException(String s) {","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" super(s);","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"Propene-Dan":11}},{"path":"src/main/java/veneto/exceptions/VenetoOperateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.exceptions;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class VenetoOperateException extends VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" * exception that may occur when a Command operates","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" * @param s the message of the exception","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" public VenetoOperateException(String s) {","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" super(s);","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"Propene-Dan":11}},{"path":"src/main/java/veneto/exceptions/VenetoStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.exceptions;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class VenetoStorageException extends VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" * exception that may occur when operate on the Storage","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" * @param s the message of the exception","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" public VenetoStorageException(String s) {","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" super(s);","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"Propene-Dan":11}},{"path":"src/main/java/veneto/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Event;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"public class Parser {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" public static final int FIND_COMMAND_INDEX \u003d 5;","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" public static final int TODO_DESCRIPTION_INDEX \u003d 5;","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" public static final int DEADLINE_DESCRIPTION_INDEX \u003d 9;","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public static final int DEADLINE_START_INDEX \u003d 3;","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public static final int EVENT_DESCRIPTION_INDEX \u003d 5;","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" public static final int EVENT_START_INDEX \u003d 5;","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" public static final int EVENT_END_INDEX \u003d 3;","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" * translate user put to commands that need to operate","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" * @param text the input from user","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" * @return the Command that the user wants to operate","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" public static Command translateCommand(String text) {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" String[] texts \u003d text.split(\" \");","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" String command \u003d texts[0].toLowerCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" switch (command) {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" case \"bye\":","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" case \"list\":","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" case \"mark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" return new MarkCommand(Integer.parseInt(texts[1]), 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" return new MarkCommand(Integer.parseInt(texts[1]), 0);","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" case \"todo\":","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" return prepareAdd(text, 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" return prepareAdd(text, 2);","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" case \"event\":","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" return prepareAdd(text, 3);","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" return new DeleteCommand(Integer.parseInt(texts[1]));","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" case \"find\":","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" return prepareFind(text);","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoException(\"Invalid Command\");","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" * generate FindCommand according to the user input","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" * @param text the details about the task","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" * @return the command that the user want to operate","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" private static Command prepareFind(String text) {","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" String keyword \u003d text.substring(FIND_COMMAND_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" * generate AddCommand according to the user input","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":" * @param text the details about the task","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":" * @param funcId indicates the type of task","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" * @return the command that the user want to operate","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"Propene-Dan"},"content":" private static Command prepareAdd(String text, int funcId) {","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"Propene-Dan"},"content":" String[] texts \u003d text.split(\"/\");","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c texts.length; i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"Propene-Dan"},"content":" texts[i] \u003d texts[i].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"Propene-Dan"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Propene-Dan"},"content":" String description;","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Propene-Dan"},"content":" switch (funcId) {","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"Propene-Dan"},"content":" case 1:","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"Propene-Dan"},"content":" description \u003d texts[0].substring(TODO_DESCRIPTION_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"Propene-Dan"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"Propene-Dan"},"content":" case 2:","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"Propene-Dan"},"content":" description \u003d texts[0].substring(DEADLINE_DESCRIPTION_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"Propene-Dan"},"content":" String deadline \u003d texts[1].substring(DEADLINE_START_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"Propene-Dan"},"content":" newTask \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"Propene-Dan"},"content":" case 3:","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"Propene-Dan"},"content":" description \u003d texts[0].substring(EVENT_DESCRIPTION_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":88,"author":{"gitId":"Propene-Dan"},"content":" String start \u003d texts[1].substring(EVENT_START_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"Propene-Dan"},"content":" String end \u003d texts[2].substring(EVENT_END_INDEX);","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"Propene-Dan"},"content":" newTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"Propene-Dan"},"content":" return new AddCommand(newTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":95}},{"path":"src/main/java/veneto/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoStorageException;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import java.io.*;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"public class Storage {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" private String savePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" private Writer writer;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" /* Constructors */","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" * create a storage for Veneto","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" * @param savePath path where the data stored","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" public Storage(String savePath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" this.savePath \u003d savePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" * initialize the storage environment","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" * @throws VenetoStorageException when it fails to create the directories","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" public void init(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" new File(\"./data\").mkdir();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" new File(savePath).createNewFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" // but may not happen","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoStorageException(\"make path fail\");","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" * load the data in storage file if exist","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" * @return TaskList containing the data stored","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" * @throws VenetoException if the path is invalid","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" public TaskList load() throws VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d new TaskList(100);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" File f \u003d new File(savePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" sc \u003d new Scanner(f);","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" String text;","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" text \u003d sc.nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" addTask(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" return tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoStorageException(\"No Storage Found\");","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" } finally {","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" sc.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" * translate the text into a Task and add it to the TaskList","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":" * @param text a task stored in the file","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"Propene-Dan"},"content":" * @throws VenetoStorageException if the storage file is destroyed","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"Propene-Dan"},"content":" public void addTask(String text) throws VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"Propene-Dan"},"content":" String[] task \u003d text.split(\",\");","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"Propene-Dan"},"content":" Task t \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"Propene-Dan"},"content":" int isDone \u003d Integer.parseInt(task[2]);","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"Propene-Dan"},"content":" switch (task[0]) {","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"Propene-Dan"},"content":" case \"toDo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"Propene-Dan"},"content":" t \u003d new ToDo(task[1], isDone);","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"Propene-Dan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"Propene-Dan"},"content":" t \u003d new Deadline(task[1], isDone, task[3]);","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"Propene-Dan"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"Propene-Dan"},"content":" t \u003d new Event(task[1], isDone, task[3], task[4]);","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"Propene-Dan"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"Propene-Dan"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException | NullPointerException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoStorageException(\"Storage File Destroyed\");","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":94,"author":{"gitId":"Propene-Dan"},"content":" * save the data if there\u0027s a change","lastModifiedDate":"2023-09-18"},{"lineNumber":95,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList that may be modified","lastModifiedDate":"2023-09-18"},{"lineNumber":96,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":97,"author":{"gitId":"Propene-Dan"},"content":" public void checkChange(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"Propene-Dan"},"content":" if (tasks.storageChanged \u003d\u003d 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"Propene-Dan"},"content":" save();","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"Propene-Dan"},"content":" tasks.storageChanged \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"Propene-Dan"},"content":" * save the data","lastModifiedDate":"2023-09-18"},{"lineNumber":106,"author":{"gitId":"Propene-Dan"},"content":" * @throws VenetoException when write fails or close fails","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"Propene-Dan"},"content":" private void save() {","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"Propene-Dan"},"content":" new File(savePath).delete();","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"Propene-Dan"},"content":" new File(savePath).createNewFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"Propene-Dan"},"content":" writer \u003d new BufferedWriter(new FileWriter(savePath));","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"Propene-Dan"},"content":" writer.write(tasks.get(i).saveToString() + \"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"Propene-Dan"},"content":" // may not happen","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoException(\"write fails\");","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"Propene-Dan"},"content":" } finally {","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"Propene-Dan"},"content":" writer.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"Propene-Dan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"Propene-Dan"},"content":" // may not happen","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoException(\"close fails\");","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":128}},{"path":"src/main/java/veneto/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" /* fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" /* Constructors */","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" * create a new Deadline Task","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" * @param deadline the deadline of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public Deadline(String description, String deadline) {","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" super(description);","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" * create a new Deadline task from storage file","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" * @param mark if the task is marked","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" * @param deadline the deadline of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" public Deadline(String description, int mark, String deadline) {","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" super(description, mark !\u003d 0);","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" * explanation of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" * @return return task details","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" return \"[D]\" + super.toString() +","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" \" (by: \" + deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))+ \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" * generate texts for storage","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" * @return String of the task data","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" return \"deadline,\" + super.saveToString() + \",\" + deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":51}},{"path":"src/main/java/veneto/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" /* fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" protected LocalDate start;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" protected LocalDate end;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /* Constructors */","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" * create a new Event Task","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" * @param start the start time of the event","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" * @param end the end time of the event","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" super(description);","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" this.start \u003d LocalDate.parse(start);","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" this.end \u003d LocalDate.parse(end);","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" * create a new Event task from storage file","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" * @param mark if the task is marked","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" * @param start the start time of the event","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" * @param end the end time of the event","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" public Event(String description, int mark, String start, String end) {","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" super(description, mark !\u003d 0);","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" this.start \u003d LocalDate.parse(start);","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" this.end \u003d LocalDate.parse(end);","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" * explanation of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" * @return return task details","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" return \"[E]\" + super.toString() +","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" \" (from: \" + start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" \" to: \" + end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" * generate texts for storage","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" * @return String of the task data","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" return \"event,\" + super.saveToString() + \",\" + start + \",\" + end;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":57}},{"path":"src/main/java/veneto/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoOperateException;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"public class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" /* fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" protected String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" /* Constructors */","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" * create a new Task","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" * create a new task from storage file","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" * @param isDone the status of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" * mark or unmark the task","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" * @param funcId the function id","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" * @throws VenetoException if the mark operation is done before","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" public void mark(int funcId) throws VenetoException {","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" if (funcId \u003d\u003d 1) { /* to mark task */","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" if (isDone \u003d\u003d false) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" } else { /* if the task is already marked */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoOperateException(\"Marked\");","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" } else { /* to unmark task */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" if (isDone \u003d\u003d true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" } else { /* if the task is already unmarked */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" throw new VenetoOperateException(\"Unmarked\");","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" * @param keyword the target keyword","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" * @return if the description of the task contains the keyword","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" // toString","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" * explanation of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" * @return return task details","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":" return getStatusIcon() + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"Propene-Dan"},"content":" * generate texts for storage","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"Propene-Dan"},"content":" * @return String of the task data","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"Propene-Dan"},"content":" return this.description + \",\" + (isDone ? 1 : 0);","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"Propene-Dan"},"content":" * return the status icon of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"Propene-Dan"},"content":" * @return the status icon of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"Propene-Dan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"Propene-Dan"},"content":" return (isDone ? \"[V] \" : \"[ ] \"); // mark done task with V","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":86}},{"path":"src/main/java/veneto/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" * indicates if the storage is changed after a command operates","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" * will be modified when command operates.","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" public int storageChanged \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" /* Constructors */","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" * creates a new TaskList","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" public TaskList() {}","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" * creates a new TaskList","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" * @param initialCapacity the initial capacity of the list","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" public TaskList(int initialCapacity) {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" super(initialCapacity);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" * the string representation of the list","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" * @return all tasks in the list","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" StringBuffer rt \u003d new StringBuffer();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" rt.append(\" \" + (i+1) + \". \" + this.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" return rt.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Propene-Dan":40}},{"path":"src/main/java/veneto/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":" /* Constructors */","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":" * create a new ToDo task","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":" * @param description the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" super(description);","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" * create a new ToDo task from storage file","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" * @param des the description of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" * @param mark if the task is marked","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" public ToDo(String des, int mark) {","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" super(des, mark !\u003d 0);","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" * explanation of the task","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" * @return return task details","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" * generate texts for storage","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" * @return String of the task data","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" public String saveToString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" return \"toDo,\" + super.saveToString();","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Propene-Dan":40}},{"path":"src/main/java/veneto/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoOperateException;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.VenetoStorageException;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"import veneto.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"import veneto.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"public class Ui {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" /* Fields */","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" private final static String GREETS \u003d \"\\nVeneto: \\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" private final static String[] COMMANDS \u003d new String[] {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" \"toDo [TASK]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" \"deadline [TASK] /by [DEADLINE(YYYY-MM-DD)]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" \"event [TASK] /from [START_TIME(YYYY-MM-DD)] /to [END_TIME(YYYY-MM-DD)]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" \"mark [TASK_ID]\", \"unmark [TASK_ID]\",","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" \"list\", \"bye\"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" };","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" private final static String LOGO \u003d","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" \" ___ ___ __________ ___ ___ __________ __________ __________\\n\" +","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" \" \\\\ \\\\ / /| _______|| \\\\ | || _______||___ ___|| ____ |\\n\" +","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" \" \\\\ \\\\ / / | |_______ | \\\\| || |_______ | | | | | |\\n\" +","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" \" \\\\ \\\\/ / | _______|| || _______| | | | | | |\\n\" +","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" \" \\\\ / | |_______ | |\\\\ || |_______ | | | |____| |\\n\" +","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" \" \\\\__/ |__________||___| \\\\___||__________| |__| |__________| ...starts\\n\\n\";","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" /* Methods */","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" * shows which exception occurs and give hint to the user","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" * @param e the DanException","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" public static void showError(VenetoException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" if (e instanceof VenetoOperateException) {","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" switch (e.getMessage()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" case \"Unmarked\":","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 这个没标记过哦!\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" return;","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" case \"Marked\":","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 这个已经做完了哦!\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" return;","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" case \"Add\":","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 输入格式不对!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(\" 你可以跟我说:\\n\" + Arrays.toString(COMMANDS) + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" return;","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" case \"Not Found\":","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 好像没有这样的任务要做哦\\n\");","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"Propene-Dan"},"content":" return;","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":" } else if (e instanceof VenetoStorageException) {","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":" if (e.getMessage().equals(\"Storage File Destroyed\")) {","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 没找到内存哦 现在重新创建一个!\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" } else {","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 不该发生的发生了…\");","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"Propene-Dan"},"content":" } else if (e.getMessage().equals(\"Invalid Command\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" 输入格式不对!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(\" 你可以跟我说:\\n\" + Arrays.toString(COMMANDS) + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"Propene-Dan"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(GREETS + \" ???\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"Propene-Dan"},"content":" * give responses to user after they call commands","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"Propene-Dan"},"content":" * @param command the Command operated just now","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"Propene-Dan"},"content":" * @param tasks the TaskList of Veneto","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"Propene-Dan"},"content":" public void afterCommand(Command command, TaskList tasks) {","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"Propene-Dan"},"content":" switch (command.getType()) {","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"Propene-Dan"},"content":" case \"exit\":","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Propene-Dan"},"content":" goodbye();","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Propene-Dan"},"content":" case \"add\":","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 记下来了:\\n \" + command +","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"Propene-Dan"},"content":" \"!\\n 现在有\" + tasks.size() + \"项任务要做\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"Propene-Dan"},"content":" case \"list\":","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 还有这些要做哦!\\n\" +","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"Propene-Dan"},"content":" tasks.toString()","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Propene-Dan"},"content":" case \"mark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 我这就帮您标记好!\\n \" + command + \"\\n\"","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Propene-Dan"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 啊 没关系 帮您擦掉标记了哦\" + \"\\n \" + command + \"\\n\"","lastModifiedDate":"2023-09-18"},{"lineNumber":97,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"Propene-Dan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"Propene-Dan"},"content":" GREETS +","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"Propene-Dan"},"content":" \" 好啦,帮你擦掉了一条任务哦:\\n \" + command +","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"Propene-Dan"},"content":" \"\\n 现在还剩下\" + tasks.size() + \"项任务\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"Propene-Dan"},"content":" case \"find\":","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"Propene-Dan"},"content":" GREETS + \" 相关的任务都在这里了哦:\\n\" + command","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"Propene-Dan"},"content":" break;","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"Propene-Dan"},"content":" * get input from user","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"Propene-Dan"},"content":" * @return the command translated from user input","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"Propene-Dan"},"content":" public Command getCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"Propene-Dan"},"content":" String text \u003d new Scanner(System.in).nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"Propene-Dan"},"content":" return Parser.translateCommand(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"Propene-Dan"},"content":" * greets when Veneto runs","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"Propene-Dan"},"content":" public void hello() {","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"Propene-Dan"},"content":" LOGO + GREETS +","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"Propene-Dan"},"content":" \" VV为您服务\\n\" +","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"Propene-Dan"},"content":" \" 有什么可以要帮忙可以跟我说!\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"Propene-Dan"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"Propene-Dan"},"content":" * says goodbye when session ends","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"Propene-Dan"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"Propene-Dan"},"content":" public void goodbye() {","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"Propene-Dan"},"content":" GREETS +","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"Propene-Dan"},"content":" \" 拜拜啦 下次见\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":143}},{"path":"src/test/java/veneto/VenetoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"public class VenetoTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":21}},{"path":"src/test/java/veneto/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class AddCommandTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void op() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" void testToString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void getType() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":20}},{"path":"src/test/java/veneto/command/FindCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class FindCommandTest {","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void op() {","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" void testToString() {","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void getType() {","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"Propene-Dan":20}},{"path":"src/test/java/veneto/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class MarkCommandTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void op() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" void testToString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void getType() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":20}},{"path":"src/test/java/veneto/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class EventTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" \"[E][ ] a (from: Sep 10 2019 to: Sep 11 2019)\",","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", \"2019-09-10\", \"2019-09-11\").toString()","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" \"[E][V] a (from: Sep 10 2019 to: Sep 11 2019)\",","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", 1, \"2019-09-10\", \"2019-09-11\").toString()","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":" \"event,a,0,2019-09-10,2019-09-11\",","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", \"2019-09-10\", \"2019-09-11\").saveToString()","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" \"event,a,1,2019-09-10,2019-09-11\",","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" new Event(\"a\", 1, \"2019-09-10\", \"2019-09-11\").saveToString()","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":40}},{"path":"src/test/java/veneto/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"class ToDoTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"[T][ ] a\", new ToDo(\"a\").toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" void toString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"[T][V] a\", new ToDo(\"a\", 1).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionOnly_unmarkedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"toDo,a,0\", new ToDo(\"a\").saveToString());","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" void saveToString_toDoWithDescriptionAndStatus_markedToDo() {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Propene-Dan"},"content":" assertEquals(\"toDo,a,1\", new ToDo(\"a\", 1).saveToString());","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":28}},{"path":"src/test/java/veneto/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"package veneto.ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"class UiTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"// @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"// void showError_unmarkedOperateException_writtenCorrectly() {","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"// assertEquals(\"\\nVeneto: \\n 这个没标记过哦!\\n\", Ui.showError(new DanOperateException(\"Unmarked\")));","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"// }","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" void afterCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" void getCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" void goodbye() {","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Propene-Dan":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"todo borrow book","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"deadline return book /by 2019-08-10","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"event project meeting /from 2020-05-09 /to 2020-05-10","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"list","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Propene-Dan"},"content":"mark 1","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Propene-Dan"},"content":"mark 3","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"unmark 3","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"unmark 2","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"list","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":"delete 3","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":"Bye","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Propene-Dan":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":"-"},"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":"Propene-Dan"},"content":"java -classpath ..\\bin veneto.Veneto \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-16"},{"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,"Propene-Dan":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":"-"},"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":"Propene-Dan"},"content":"java -classpath ../bin Dan \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-08"},{"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":{"-":37,"Propene-Dan":1}}] diff --git a/Propene-Dan_ip_master/commits.json b/Propene-Dan_ip_master/commits.json index 03a01453..e03339ff 100644 --- a/Propene-Dan_ip_master/commits.json +++ b/Propene-Dan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Propene-Dan":[{"date":"2023-09-02","commitResults":[{"hash":"d70a89cea2ae6cd8c2d8e68d5071177e1c2f009f","isMergeCommit":false,"messageTitle":"add level-0","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fb563f92e23aec2088bb5857358079e46b57a680","isMergeCommit":false,"messageTitle":"added Level 1","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"73ab9678b52ec2961c9a1df227f01896a18602a0","isMergeCommit":false,"messageTitle":"add MyList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"6fabf95ece8ef533f7f1b4bea73421b5aa2bec49","isMergeCommit":false,"messageTitle":"added level 2","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ab634e92011b91b83a27ece8d56811be7e2a669c","isMergeCommit":false,"messageTitle":"add Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"0443851e1563e408f587b316d0b82320f6e5ea5e","isMergeCommit":false,"messageTitle":"changing MyList to a Task List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"03e576de5bcce80a6071d2eb13b4d088969c3767","isMergeCommit":false,"messageTitle":"added level 3","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":13}}},{"hash":"2dddc561c647b2025cd547e8481f9d398e978b3a","isMergeCommit":false,"messageTitle":"add Deadline.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"da7ab38b77a1cd7e010a0bda6264ac1351f8ca04","isMergeCommit":false,"messageTitle":"add Event.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"0d3fb8f8b997afbb025276467a91e703dc246752","isMergeCommit":false,"messageTitle":"add toDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"71a526c41b657acd720921d0a73c10a1dfcb16f8","isMergeCommit":false,"messageTitle":"add some comments to Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":16}}},{"hash":"32d61ff9d6bde2f2f01acefd7f7d6fd8a6786d84","isMergeCommit":false,"messageTitle":"modified MyList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c2dd4b66755ab1f3a71a2466e3d89e1e72dab5cb","isMergeCommit":false,"messageTitle":"added level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":7}}}]},{"date":"2023-09-08","commitResults":[{"hash":"7bb853f6e593edb855607da70918ace4a66ec838","isMergeCommit":false,"messageTitle":"bug fixed","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":0},"java":{"insertions":74,"deletions":40},"sh":{"insertions":1,"deletions":1}}},{"hash":"946a4200edbc51b45fc7729893e3ee19570eaec3","isMergeCommit":false,"messageTitle":"added DanException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f3c38a1cbda21b8bf2d3f811bfcd64d778d9668d","isMergeCommit":false,"messageTitle":"add level 5","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":12}}},{"hash":"af19be18d1bedc96756451c88f083c0bbb2c3c9f","isMergeCommit":false,"messageTitle":"added level 6","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":37}}},{"hash":"6e02da2cdb4c5e26c8a00a0a480841df63c8038e","isMergeCommit":false,"messageTitle":"used enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":4}}}]},{"date":"2023-09-09","commitResults":[{"hash":"83987f897b0ac0fb3ea8b56671fac2f3f88fd324","isMergeCommit":false,"messageTitle":"bug fixed after using enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"6940826138bd42f379e5d5c3aa4a83739327b41d","isMergeCommit":false,"messageTitle":"input.txt modified","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":11}}}]},{"date":"2023-09-10","commitResults":[{"hash":"fe6a5b7f7889c8292756de0b61e0cecad7580336","isMergeCommit":false,"messageTitle":"updated deadline.java with functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"9de4371fe2efadab256d0479e36ef8e8d44cb776","isMergeCommit":false,"messageTitle":"updated event.java with funcs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"610f3fe9de498517486c185a43429418bba727d0","isMergeCommit":false,"messageTitle":"updated task.java with funcs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"31194bfddb30f9c6607813a73be886c49ed61168","isMergeCommit":false,"messageTitle":"updated todo.java with functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"12dd5152bf596efb21ede76e30a1debddabe7586","isMergeCommit":false,"messageTitle":"updated test-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}},{"hash":"886b3f96bddba35372feb80d5ab237f803d3f594","isMergeCommit":false,"messageTitle":"add level 7","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":43}}},{"hash":"a2d3388f94e1cb683016dcd2851ca424c8986ca5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41fec5f86c3e37de696f5ca7edeb00221d14c553","isMergeCommit":false,"messageTitle":"change field deadline into type \"LocalDate\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"5e9ba09916b4149d5de0368d9c96b9f5072b1b89","isMergeCommit":false,"messageTitle":"change field \"start\", \"end\" into type \"LocalDate\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"9f6fd7614ae8a37074d8c007cd0fbfc638c8c6a6","isMergeCommit":false,"messageTitle":"added level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"cf1d3ca8b015d593a2d09b86deb174fad876fb36","isMergeCommit":false,"messageTitle":"bugs fixed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"27ad786c4bb396d58761a4c8ab03dda117481335","isMergeCommit":false,"messageTitle":"updated input.txt","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3}}},{"hash":"1006fc69ff1d6c499643de4dda899be17f9643f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"d31bda62c34bb481f52db8cdaaa9883f99182172","isMergeCommit":false,"messageTitle":"added AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":0}}},{"hash":"7758e659cfa4852714e57457783d9f3896836873","isMergeCommit":false,"messageTitle":"renamed MyTask.java -\u003e TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"f898eca9f5a7e38b9bd8bdcab8035c00e718da13","isMergeCommit":false,"messageTitle":"added ListCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"4cb7eeb55af2b7898c2e4386186be0999e790a57","isMergeCommit":false,"messageTitle":"added ExitCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"39bad219c667eb1c3f28d252efffc286e8aa306d","isMergeCommit":false,"messageTitle":"added Command.java as abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e244086e2d691bc2d950e0bb20580d3b518dc9d6","isMergeCommit":false,"messageTitle":"make package dan/task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"4b37e32aa1642debc8eda85e1189819785529933","isMergeCommit":false,"messageTitle":"mk package dan.exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"972ffc3fb1066760e62723834a48a381953fa23b","isMergeCommit":false,"messageTitle":"added toString() to AddCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"a0857e9878dbbd84eb2ea1471a6ccb284ffa40fc","isMergeCommit":false,"messageTitle":"added toString to DeleteCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"353e7faa6696a1de83a7ffb24501a5e3cb4640bc","isMergeCommit":false,"messageTitle":"added MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"2df0253dc1a1d3b09dd55226a11ee9aed59dc4b6","isMergeCommit":false,"messageTitle":"fixed bugs after packaging DanException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}},{"hash":"61f1ef8cbf978a5cd0ef4c4853e52287245eead4","isMergeCommit":false,"messageTitle":"added Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"491f621b1bcbfdc208d6c76658b5dea438fd59b9","isMergeCommit":false,"messageTitle":"replaced DanException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"e76b22563cd151d8f43d6c7b5ed63ecdf4593ef9","isMergeCommit":false,"messageTitle":"added Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":0}}},{"hash":"7bc4e608267bf244186ee692524b81dbec6692ea","isMergeCommit":false,"messageTitle":"added Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"e13c03502215ee6ce4e560b0ad059861a8ab67fd","isMergeCommit":false,"messageTitle":"added A-OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":220}}}]},{"date":"2023-09-13","commitResults":[{"hash":"103664151ab3b36bb760f57546e85621764f785d","isMergeCommit":false,"messageTitle":"created DanOperateException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"6a3d9e09d8e69437ec28fb136c0147d2c6385b01","isMergeCommit":false,"messageTitle":"created DanStorageException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"3eca81e5c820e9ffce5f2210482e25cd10f79dc2","isMergeCommit":false,"messageTitle":"Fixed Bugs after adding more Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":18}}},{"hash":"40de3b011560eb9a512bba25bbbc07a0c4a307e9","isMergeCommit":false,"messageTitle":"fixed bugs in task.java after added more Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"a75bed86dd7ee11673e9f8d47499734a956353bd","isMergeCommit":false,"messageTitle":"modified showError()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":14}}},{"hash":"a8b6457c21d018e2b3811898d8e95b99cd1f6706","isMergeCommit":false,"messageTitle":"fixed bugs in Add command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":24}}},{"hash":"43420cbe953fcce6e62978001ea5e0fc0db4a825","isMergeCommit":false,"messageTitle":"added A-OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":8}}},{"hash":"e49cf6a17c9a02aaa3456c0707e923e033667959","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"67e4213ef0b6b8dc741206b51e9f8895b91551a6","isMergeCommit":false,"messageTitle":"added A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"86da9bb38d164ac78de59be36c3265bab1c77e66","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"959ecd68127dfe033a5ad933cd9aad3090c01288","isMergeCommit":false,"messageTitle":"Added Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":0}}},{"hash":"4910fd1bbffb1fe5b4f126065f08d88848bbe477","isMergeCommit":false,"messageTitle":"apply parser in ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":22}}},{"hash":"d1467026a4b96fa56a12b9c46dd2f74086b2c091","isMergeCommit":false,"messageTitle":"modified AddCommand to apply Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":29}}},{"hash":"5675ef8df81f349f5481520233c1384aac3e2cf2","isMergeCommit":false,"messageTitle":"modified Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fedbd573b0cba6f02b540c6c737b04ed7e701365","isMergeCommit":false,"messageTitle":"modified Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"8abb3315455f39ebd876f56f77ca92f8b2fe6f59","isMergeCommit":false,"messageTitle":"modified Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"cd198b99d9a7599edc1f457017ce846e9faad0e3","isMergeCommit":false,"messageTitle":"Modified List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"467d5215dd5ce0dff41d352e8801ed2d8675db0b","isMergeCommit":false,"messageTitle":"Modified Mark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"22c6628eca808097ff5ae9823331f11b76bde99b","isMergeCommit":false,"messageTitle":"added to package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4311adbc59daa23b35ea097042ffd4f2f3dd9a6e","isMergeCommit":false,"messageTitle":"bugs fixed After added packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"b38037f9d79f94b78c55ec3f42481c0deba2871c","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"89fb8e762b83319147d9f00e8a9ee21ffe9a883a","isMergeCommit":false,"messageTitle":"renamed to Veneto","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c57515b710ed038473709eca78bc5ddddf9ac9a1","isMergeCommit":false,"messageTitle":"Further renamed to Veneto","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":66},"bat":{"insertions":1,"deletions":1},"md":{"insertions":9,"deletions":7}}}]},{"date":"2023-09-15","commitResults":[{"hash":"8e017d736db73d06eb9497f9b2e6e0c0f021040c","isMergeCommit":false,"messageTitle":"change showError static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e86be9c6d7ac84b012da44bc81d5472d21f66436","isMergeCommit":false,"messageTitle":"added ToDOTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}},{"hash":"ee5e6c421e2099f23aa1a9f20d8490221d785f8a","isMergeCommit":false,"messageTitle":"Added EventTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"6de1fc4b232e61cc16ab797ad1d4bc136dd4094e","isMergeCommit":false,"messageTitle":"added UiTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"6b974b9593ee275bc73899c2b50e9d0d33024fd6","isMergeCommit":false,"messageTitle":"Added AddCommandTest(Will be filled later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"c7aa0b622d25574c224dc6baa2b8f0fcf2e797f7","isMergeCommit":false,"messageTitle":"Added MarkCommandTest(Will be filled later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"ffc71e8666e9c7b147d509478335f608253b47ac","isMergeCommit":false,"messageTitle":"Added VenetoTest(Will be filled later)","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"34a9d61a9a1002d34501e452c04b2c25b132755d","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"d4ddabaa672458baee838715520f91323840f9b2","isMergeCommit":false,"messageTitle":"put Veneto.java to package veneto","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2},"java":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"c89265cf7922f3650156c35d1ee162b44fac4b0a","isMergeCommit":false,"messageTitle":"rename constants to ALL_CAPITAL","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":32}}},{"hash":"e220b59ec96986fdeeec2bd8ece2bb8307fd0915","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Jar\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Propene-Dan":{"java":840,"md":9,"fxml":0,"sh":1,"bat":1,"gradle":4,"txt":11}},"authorContributionVariance":{"Propene-Dan":22662.81},"authorDisplayNameMap":{"Propene-Dan":"CS2103T-F12-3 SONG..NGXI"}} +{"authorDailyContributionsMap":{"Propene-Dan":[{"date":"2023-09-02","commitResults":[{"hash":"d70a89cea2ae6cd8c2d8e68d5071177e1c2f009f","isMergeCommit":false,"messageTitle":"add level-0","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fb563f92e23aec2088bb5857358079e46b57a680","isMergeCommit":false,"messageTitle":"added Level 1","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"73ab9678b52ec2961c9a1df227f01896a18602a0","isMergeCommit":false,"messageTitle":"add MyList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"6fabf95ece8ef533f7f1b4bea73421b5aa2bec49","isMergeCommit":false,"messageTitle":"added level 2","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ab634e92011b91b83a27ece8d56811be7e2a669c","isMergeCommit":false,"messageTitle":"add Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"0443851e1563e408f587b316d0b82320f6e5ea5e","isMergeCommit":false,"messageTitle":"changing MyList to a Task List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"03e576de5bcce80a6071d2eb13b4d088969c3767","isMergeCommit":false,"messageTitle":"added level 3","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":13}}},{"hash":"2dddc561c647b2025cd547e8481f9d398e978b3a","isMergeCommit":false,"messageTitle":"add Deadline.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"da7ab38b77a1cd7e010a0bda6264ac1351f8ca04","isMergeCommit":false,"messageTitle":"add Event.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"0d3fb8f8b997afbb025276467a91e703dc246752","isMergeCommit":false,"messageTitle":"add toDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"71a526c41b657acd720921d0a73c10a1dfcb16f8","isMergeCommit":false,"messageTitle":"add some comments to Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":16}}},{"hash":"32d61ff9d6bde2f2f01acefd7f7d6fd8a6786d84","isMergeCommit":false,"messageTitle":"modified MyList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c2dd4b66755ab1f3a71a2466e3d89e1e72dab5cb","isMergeCommit":false,"messageTitle":"added level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":7}}}]},{"date":"2023-09-08","commitResults":[{"hash":"7bb853f6e593edb855607da70918ace4a66ec838","isMergeCommit":false,"messageTitle":"bug fixed","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":0},"java":{"insertions":74,"deletions":40},"sh":{"insertions":1,"deletions":1}}},{"hash":"946a4200edbc51b45fc7729893e3ee19570eaec3","isMergeCommit":false,"messageTitle":"added DanException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f3c38a1cbda21b8bf2d3f811bfcd64d778d9668d","isMergeCommit":false,"messageTitle":"add level 5","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":12}}},{"hash":"af19be18d1bedc96756451c88f083c0bbb2c3c9f","isMergeCommit":false,"messageTitle":"added level 6","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":37}}},{"hash":"6e02da2cdb4c5e26c8a00a0a480841df63c8038e","isMergeCommit":false,"messageTitle":"used enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":4}}}]},{"date":"2023-09-09","commitResults":[{"hash":"83987f897b0ac0fb3ea8b56671fac2f3f88fd324","isMergeCommit":false,"messageTitle":"bug fixed after using enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"6940826138bd42f379e5d5c3aa4a83739327b41d","isMergeCommit":false,"messageTitle":"input.txt modified","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":11}}}]},{"date":"2023-09-10","commitResults":[{"hash":"fe6a5b7f7889c8292756de0b61e0cecad7580336","isMergeCommit":false,"messageTitle":"updated deadline.java with functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"9de4371fe2efadab256d0479e36ef8e8d44cb776","isMergeCommit":false,"messageTitle":"updated event.java with funcs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"610f3fe9de498517486c185a43429418bba727d0","isMergeCommit":false,"messageTitle":"updated task.java with funcs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"31194bfddb30f9c6607813a73be886c49ed61168","isMergeCommit":false,"messageTitle":"updated todo.java with functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"12dd5152bf596efb21ede76e30a1debddabe7586","isMergeCommit":false,"messageTitle":"updated test-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}},{"hash":"886b3f96bddba35372feb80d5ab237f803d3f594","isMergeCommit":false,"messageTitle":"add level 7","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":43}}},{"hash":"a2d3388f94e1cb683016dcd2851ca424c8986ca5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41fec5f86c3e37de696f5ca7edeb00221d14c553","isMergeCommit":false,"messageTitle":"change field deadline into type \"LocalDate\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"5e9ba09916b4149d5de0368d9c96b9f5072b1b89","isMergeCommit":false,"messageTitle":"change field \"start\", \"end\" into type \"LocalDate\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"9f6fd7614ae8a37074d8c007cd0fbfc638c8c6a6","isMergeCommit":false,"messageTitle":"added level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"cf1d3ca8b015d593a2d09b86deb174fad876fb36","isMergeCommit":false,"messageTitle":"bugs fixed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"27ad786c4bb396d58761a4c8ab03dda117481335","isMergeCommit":false,"messageTitle":"updated input.txt","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3}}},{"hash":"1006fc69ff1d6c499643de4dda899be17f9643f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"d31bda62c34bb481f52db8cdaaa9883f99182172","isMergeCommit":false,"messageTitle":"added AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":0}}},{"hash":"7758e659cfa4852714e57457783d9f3896836873","isMergeCommit":false,"messageTitle":"renamed MyTask.java -\u003e TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"f898eca9f5a7e38b9bd8bdcab8035c00e718da13","isMergeCommit":false,"messageTitle":"added ListCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"4cb7eeb55af2b7898c2e4386186be0999e790a57","isMergeCommit":false,"messageTitle":"added ExitCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"39bad219c667eb1c3f28d252efffc286e8aa306d","isMergeCommit":false,"messageTitle":"added Command.java as abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e244086e2d691bc2d950e0bb20580d3b518dc9d6","isMergeCommit":false,"messageTitle":"make package dan/task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"4b37e32aa1642debc8eda85e1189819785529933","isMergeCommit":false,"messageTitle":"mk package dan.exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"972ffc3fb1066760e62723834a48a381953fa23b","isMergeCommit":false,"messageTitle":"added toString() to AddCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"a0857e9878dbbd84eb2ea1471a6ccb284ffa40fc","isMergeCommit":false,"messageTitle":"added toString to DeleteCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"353e7faa6696a1de83a7ffb24501a5e3cb4640bc","isMergeCommit":false,"messageTitle":"added MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"2df0253dc1a1d3b09dd55226a11ee9aed59dc4b6","isMergeCommit":false,"messageTitle":"fixed bugs after packaging DanException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}},{"hash":"61f1ef8cbf978a5cd0ef4c4853e52287245eead4","isMergeCommit":false,"messageTitle":"added Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"491f621b1bcbfdc208d6c76658b5dea438fd59b9","isMergeCommit":false,"messageTitle":"replaced DanException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"e76b22563cd151d8f43d6c7b5ed63ecdf4593ef9","isMergeCommit":false,"messageTitle":"added Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":0}}},{"hash":"7bc4e608267bf244186ee692524b81dbec6692ea","isMergeCommit":false,"messageTitle":"added Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"e13c03502215ee6ce4e560b0ad059861a8ab67fd","isMergeCommit":false,"messageTitle":"added A-OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":220}}}]},{"date":"2023-09-13","commitResults":[{"hash":"103664151ab3b36bb760f57546e85621764f785d","isMergeCommit":false,"messageTitle":"created DanOperateException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"6a3d9e09d8e69437ec28fb136c0147d2c6385b01","isMergeCommit":false,"messageTitle":"created DanStorageException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"3eca81e5c820e9ffce5f2210482e25cd10f79dc2","isMergeCommit":false,"messageTitle":"Fixed Bugs after adding more Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":18}}},{"hash":"40de3b011560eb9a512bba25bbbc07a0c4a307e9","isMergeCommit":false,"messageTitle":"fixed bugs in task.java after added more Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"a75bed86dd7ee11673e9f8d47499734a956353bd","isMergeCommit":false,"messageTitle":"modified showError()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":14}}},{"hash":"a8b6457c21d018e2b3811898d8e95b99cd1f6706","isMergeCommit":false,"messageTitle":"fixed bugs in Add command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":24}}},{"hash":"43420cbe953fcce6e62978001ea5e0fc0db4a825","isMergeCommit":false,"messageTitle":"added A-OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":8}}},{"hash":"e49cf6a17c9a02aaa3456c0707e923e033667959","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"67e4213ef0b6b8dc741206b51e9f8895b91551a6","isMergeCommit":false,"messageTitle":"added A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"86da9bb38d164ac78de59be36c3265bab1c77e66","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"959ecd68127dfe033a5ad933cd9aad3090c01288","isMergeCommit":false,"messageTitle":"Added Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":0}}},{"hash":"4910fd1bbffb1fe5b4f126065f08d88848bbe477","isMergeCommit":false,"messageTitle":"apply parser in ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":22}}},{"hash":"d1467026a4b96fa56a12b9c46dd2f74086b2c091","isMergeCommit":false,"messageTitle":"modified AddCommand to apply Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":29}}},{"hash":"5675ef8df81f349f5481520233c1384aac3e2cf2","isMergeCommit":false,"messageTitle":"modified Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fedbd573b0cba6f02b540c6c737b04ed7e701365","isMergeCommit":false,"messageTitle":"modified Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"8abb3315455f39ebd876f56f77ca92f8b2fe6f59","isMergeCommit":false,"messageTitle":"modified Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"cd198b99d9a7599edc1f457017ce846e9faad0e3","isMergeCommit":false,"messageTitle":"Modified List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"467d5215dd5ce0dff41d352e8801ed2d8675db0b","isMergeCommit":false,"messageTitle":"Modified Mark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"22c6628eca808097ff5ae9823331f11b76bde99b","isMergeCommit":false,"messageTitle":"added to package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4311adbc59daa23b35ea097042ffd4f2f3dd9a6e","isMergeCommit":false,"messageTitle":"bugs fixed After added packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"b38037f9d79f94b78c55ec3f42481c0deba2871c","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"89fb8e762b83319147d9f00e8a9ee21ffe9a883a","isMergeCommit":false,"messageTitle":"renamed to Veneto","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c57515b710ed038473709eca78bc5ddddf9ac9a1","isMergeCommit":false,"messageTitle":"Further renamed to Veneto","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":66},"bat":{"insertions":1,"deletions":1},"md":{"insertions":9,"deletions":7}}}]},{"date":"2023-09-15","commitResults":[{"hash":"8e017d736db73d06eb9497f9b2e6e0c0f021040c","isMergeCommit":false,"messageTitle":"change showError static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e86be9c6d7ac84b012da44bc81d5472d21f66436","isMergeCommit":false,"messageTitle":"added ToDOTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}},{"hash":"ee5e6c421e2099f23aa1a9f20d8490221d785f8a","isMergeCommit":false,"messageTitle":"Added EventTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"6de1fc4b232e61cc16ab797ad1d4bc136dd4094e","isMergeCommit":false,"messageTitle":"added UiTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"6b974b9593ee275bc73899c2b50e9d0d33024fd6","isMergeCommit":false,"messageTitle":"Added AddCommandTest(Will be filled later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"c7aa0b622d25574c224dc6baa2b8f0fcf2e797f7","isMergeCommit":false,"messageTitle":"Added MarkCommandTest(Will be filled later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"ffc71e8666e9c7b147d509478335f608253b47ac","isMergeCommit":false,"messageTitle":"Added VenetoTest(Will be filled later)","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"34a9d61a9a1002d34501e452c04b2c25b132755d","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"d4ddabaa672458baee838715520f91323840f9b2","isMergeCommit":false,"messageTitle":"put Veneto.java to package veneto","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2},"java":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"c89265cf7922f3650156c35d1ee162b44fac4b0a","isMergeCommit":false,"messageTitle":"rename constants to ALL_CAPITAL","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":32}}},{"hash":"e220b59ec96986fdeeec2bd8ece2bb8307fd0915","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Jar\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"327b91a27af2ba643a51905a47c98cf4b383be9a","isMergeCommit":false,"messageTitle":"renamed DanException to VenetoException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":25}}},{"hash":"b49ec01fdb727a99852bd6c907d4bb4cfb474113","isMergeCommit":false,"messageTitle":"add JavaDoc to Veneto.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":9}}},{"hash":"b3cbbe2b2a4ad260737d1a610c7002520a1cf91e","isMergeCommit":false,"messageTitle":"add JavaDoc to AddCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":7}}},{"hash":"58e2c30ea6d4704edb80b8278d9791815d65d725","isMergeCommit":false,"messageTitle":"add JavaDoc to Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"8275eb4611b02ac6a73a73733c2e0d40cf6b1267","isMergeCommit":false,"messageTitle":"add JavaDoc to DeleteCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"ff53235928fb61612babb360555f932dee2825dd","isMergeCommit":false,"messageTitle":"add JavaDoc to ExitCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"0e728ce0d8063fe80c15b0fd3fef87f0ee0b530c","isMergeCommit":false,"messageTitle":"add JavaDoc to ListCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"70b6d003d6440fe3848f9307ee7e7934ce073636","isMergeCommit":false,"messageTitle":"add JavaDoc to MarkCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"f97962dd5948594ce45856733ae1ab849f1eefe1","isMergeCommit":false,"messageTitle":"add JavaDoc to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"528051be9cd05cad6ead8fc4429292fbdc58e7d2","isMergeCommit":false,"messageTitle":"add JavaDoc to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":13}}},{"hash":"235bcb678764e7de27e4e6bfb58484c653fb9738","isMergeCommit":false,"messageTitle":"add JavaDoc to Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":12}}},{"hash":"2788070cfa345c767ec0cb97296ad4ded68960e2","isMergeCommit":false,"messageTitle":"add JavaDoc to Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":14}}},{"hash":"7ba81c4c6f8017ff5c238aeb88dd07d032d325c4","isMergeCommit":false,"messageTitle":"add JavaDoc to Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":19}}},{"hash":"2028dccc8b2256cb3f380a01aae951aba16ce1df","isMergeCommit":false,"messageTitle":"add JavaDoc to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"211d3cc868341dcc673a69297193dde0fb073656","isMergeCommit":false,"messageTitle":"add JavaDoc to ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":12}}},{"hash":"7a7758e84dd79176f21c2b871c35c4f8010dfbd3","isMergeCommit":false,"messageTitle":"add JavaDoc to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":13}}},{"hash":"39eb73af692598c754ccc808690741feb9e11a14","isMergeCommit":false,"messageTitle":"Modified UiTest","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"1de9d9519f9f9a3422f53fe368ba5beaf4536ad1","isMergeCommit":false,"messageTitle":"fixed bugs after renameing DanExceptions to VenetoExceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}},{"hash":"17deebc6ea5840091ca42fae480c6192d4a1adbb","isMergeCommit":false,"messageTitle":"added FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"a961434421c78d925db60caaaabf8ee9d84b674d","isMergeCommit":false,"messageTitle":"modified Task to support FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"b423a977f2ed8915e5503bb9677b905022526d58","isMergeCommit":false,"messageTitle":"modified Parser to support FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"f3d5e2c31be5c9a99b95d131d55871ecdf0b82ef","isMergeCommit":false,"messageTitle":"modified Ui to support FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"45c937e13fb7382ab6123d5e2d1cc8a39c0a9c9b","isMergeCommit":false,"messageTitle":"added test file(will be filled later)","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"83c7fc70e85431ff310d2361b0d8ba98560dd811","isMergeCommit":false,"messageTitle":"changed naming","messageBody":"","tags":["A-CodeStandard"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"c73b59320576ed30f1a7f94144db5da396aa28d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Conflicts resolved\n\n# Conflicts:\n#\tsrc/main/java/veneto/storage/Storage.java\n#\tsrc/main/java/veneto/task/Task.java\n#\tsrc/main/java/veneto/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"320f1cc9cbdc74c32d71fa737dd56cac639307a4","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"Conflicts resolved\n\n# Conflicts:\n#\tsrc/main/java/veneto/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"51de6f63f6f7ef3acc7482d074bb51ac8736003a","isMergeCommit":true,"messageTitle":"Merge tag \u0027level-9\u0027","messageBody":"Conflicts resolved\n\n# Conflicts:\n#\tsrc/main/java/veneto/parser/Parser.java\n#\tsrc/main/java/veneto/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"e9ab2213764df2a9f5b36a9ea730b46c736a40ce","isMergeCommit":false,"messageTitle":"further resolved merge conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":27}}},{"hash":"194213f871bd151bf73eb56b0458c2a909e24adf","isMergeCommit":false,"messageTitle":"add Constants to avoid magic numbers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":9}}},{"hash":"838daa406d244bcaaf49a12104a79090ea1cd519","isMergeCommit":false,"messageTitle":"make getType() non-static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"81d83fc08eabc22bec83d7d6add6f86c604fd175","isMergeCommit":false,"messageTitle":"modified Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Propene-Dan":{"java":1195,"md":9,"fxml":0,"sh":1,"bat":1,"gradle":4,"txt":11}},"authorContributionVariance":{"Propene-Dan":37718.22},"authorDisplayNameMap":{"Propene-Dan":"CS2103T-F12-3 SONG..NGXI"}} diff --git a/TiwKangXu_ip_master/authorship.json b/TiwKangXu_ip_master/authorship.json index 4f27d152..c6c6ae89 100644 --- a/TiwKangXu_ip_master/authorship.json +++ b/TiwKangXu_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":"TiwKangXu"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"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":"TiwKangXu"},"content":"// mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":"// mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" mainClassName \u003d \"duke.Launcher\"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" archiveBaseName \u003d \"newDukeWeek5\"","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","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":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TiwKangXu":15,"-":40}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" * A chatbot that helps to record tasks and store tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" private Parser parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Duke object.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" public Duke() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" this.storage \u003d new Storage(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" this.parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Runs the load function in Storage, called in MainWindow.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" public void loadByDuke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" storage.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" * Bridges GUI and Program. Takes in user command scanned by MainWindow and parses it.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" * @return chatbot\u0027s reply","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" public String getResponse(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" return parser.interact(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"TiwKangXu":46,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Launcher class that we run through IntelliJ to launch the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" * Main class starts up the GUI chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" private Image userImg \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" private Image dukeImg \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" private TextField userInput \u003d new TextField();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" private VBox dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" * The main entry point for all JavaFX applications.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" * The start method is called after the init method has returned,","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" * and after the system is ready for the application to begin running.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * NOTE: This method is called on the JavaFX Application Thread.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" * primary stages.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" * @throws Exception if something goes wrong","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" public void start(Stage stage) throws Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":58}},{"path":"src/main/java/duke/command/FirstWord.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Stores all valid command.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public enum FirstWord {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, INVALID, FIND","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":8}},{"path":"src/main/java/duke/exception/DukeDuplicatedTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles duplicated task entered.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeDuplicatedTaskException extends DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Duplicated Task!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeEmptyToDoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles creating To Do event without description.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeEmptyToDoException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Parent class of all Duke Exceptions.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return \" :\u003c OOPS! \";","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeInvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles invalid date.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeInvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Invalid date format. Date format should be YYYY-MM-DD.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeInvalidMarkUnmarkArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles invalid mark / unmark argument entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"public class DukeInvalidMarkUnmarkArgumentException extends DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Wrong argument entered for mark / unmark.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/exception/DukeInvalidSavedToFileLineTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles unknown command entered.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeInvalidSavedToFileLineTypeException extends DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Wrong task type saved in disc.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/exception/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles unknown command entered.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"I\u0027m sorry, but I don\u0027t know what that means.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"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":"TiwKangXu"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":61}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * Greets by chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" private String greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" return \" Hello! I\u0027m Jokey :) \\n What can I do for you?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" duke.loadByDuke();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" DialogBox.getDukeDialog(greet(), dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"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":51,"author":{"gitId":"TiwKangXu"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":64}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import duke.command.FirstWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.*;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * Parses command and assigns to respective tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" private Ui ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" * Constructs a Parser object.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" * @param tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" * @param storage","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" public Parser(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * Lists out all tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" private String listOutTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" String tasksList \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" tasksList +\u003d ui.listOutTasksString(i + 1, tasks.get(i).toString().trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d tasksList;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" * Exits chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" private String exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.exitString();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" private String mark(int index) throws DukeInvalidMarkUnmarkArgumentException {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.markString(task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidMarkUnmarkArgumentException();","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" private String unmark(int index) throws DukeInvalidMarkUnmarkArgumentException {","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":" task.unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.unmarkString(task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"TiwKangXu"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidMarkUnmarkArgumentException();","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"TiwKangXu"},"content":" * Adds a To Do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"TiwKangXu"},"content":" private String addToDo(String reply) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"TiwKangXu"},"content":" if (reply.length() \u003d\u003d \"todo\".length()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeEmptyToDoException();","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"TiwKangXu"},"content":" String taskContent \u003d reply.replace(\"todo \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d new ToDo(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"TiwKangXu"},"content":" * Adds a Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"TiwKangXu"},"content":" private String addDeadline(String reply) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"TiwKangXu"},"content":" String taskContent \u003d reply.substring(0, reply.indexOf(\" /by\")).replace(\"deadline \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"TiwKangXu"},"content":" String due \u003d reply.substring(reply.indexOf(\"/by\") + 4);","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d new Deadline(taskContent, LocalDate.parse(due));","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"TiwKangXu"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"TiwKangXu"},"content":" * Adds an Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"TiwKangXu"},"content":" private String addEvent(String reply) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"TiwKangXu"},"content":" String from \u003d reply.substring(reply.indexOf(\"/from\") + 6, reply.indexOf(\" /to\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"TiwKangXu"},"content":" String to \u003d reply.substring(reply.indexOf(\"/to\") + 4);","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"TiwKangXu"},"content":" String taskContent \u003d reply.substring(0, reply.indexOf(\" /from\")).replace(\"event \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d new Event(taskContent, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"TiwKangXu"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"TiwKangXu"},"content":" * Deletes a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"TiwKangXu"},"content":" private String delete(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"TiwKangXu"},"content":" assert tasks.size() \u003e 0 : \"You have no task to delete.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"TiwKangXu"},"content":" Task removedTask \u003d tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"TiwKangXu"},"content":" storage.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.deleteString(removedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"TiwKangXu"},"content":" * Constructs message for adding task.","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"TiwKangXu"},"content":" private String addTask(Task task) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"TiwKangXu"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"TiwKangXu"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"TiwKangXu"},"content":" storage.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.addTaskString(task.toString(), tasks.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeDuplicatedTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"TiwKangXu"},"content":" private String find(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"TiwKangXu"},"content":" assert tasks.size() \u003e 0 : \"Your task list is empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"TiwKangXu"},"content":" String keyword \u003d reply.replace(\"find \", \"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.findString(tasks.find(keyword));","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"TiwKangXu"},"content":" * Triggers respective actions.","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"TiwKangXu"},"content":" public String interact(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"TiwKangXu"},"content":" while (true) {","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"TiwKangXu"},"content":" // String reply \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"TiwKangXu"},"content":" FirstWord firstWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"TiwKangXu"},"content":" firstWord \u003d FirstWord.valueOf(reply.split(\" \")[0].toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"TiwKangXu"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"TiwKangXu"},"content":" firstWord \u003d FirstWord.INVALID;","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"TiwKangXu"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"TiwKangXu"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"TiwKangXu"},"content":" return exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"TiwKangXu"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"TiwKangXu"},"content":" return listOutTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"TiwKangXu"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"TiwKangXu"},"content":" return mark(Character.getNumericValue(reply.charAt(5) - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"TiwKangXu"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"TiwKangXu"},"content":" return unmark(Character.getNumericValue(reply.charAt(7) - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"TiwKangXu"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"TiwKangXu"},"content":" return addToDo(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"TiwKangXu"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"TiwKangXu"},"content":" return addDeadline(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"TiwKangXu"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"TiwKangXu"},"content":" return addEvent(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"TiwKangXu"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"TiwKangXu"},"content":" return delete(Character.getNumericValue(reply.charAt(7) - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"TiwKangXu"},"content":" case FIND:","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"TiwKangXu"},"content":" return find(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"TiwKangXu"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeUnknownCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"TiwKangXu"},"content":" // this.line(e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"TiwKangXu"},"content":" return e.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":217}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeInvalidSavedToFileLineTypeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * A class to handle storing and loading.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Storage objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" * @param tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" public Storage(TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Saves task list into disc.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" public void save() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" String dataPath \u003d Paths.get(\"data\", \"duke.txt\").toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" File dataFile \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFile));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" String line \u003d task.saveToFileLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" writer.write(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" System.out.println(\"File duke.txt not found.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" * Loads tasks from disc into list.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" public void load() {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" String dataPath \u003d Paths.get(\"data\", \"duke.txt\").toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" File dataFile \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(dataFile));","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" for (String line; (line \u003d reader.readLine()) !\u003d null;) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" tasks.add(fileToTask(line));","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" System.out.println(\"File duke.txt not found.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" System.out.println(ex.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" * Reads from disc and constructs task string to store in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":" * @param line","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" * @return task string","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeInvalidSavedToFileLineTypeException","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" private Task fileToTask(String line) throws DukeInvalidSavedToFileLineTypeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" String[] savedToFileLine \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":" String type \u003d savedToFileLine[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"TiwKangXu"},"content":" String status \u003d savedToFileLine[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"TiwKangXu"},"content":" String description \u003d savedToFileLine[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"TiwKangXu"},"content":" switch (type) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"TiwKangXu"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"TiwKangXu"},"content":" return ToDo.create(status, description);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"TiwKangXu"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"TiwKangXu"},"content":" String due \u003d savedToFileLine[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"TiwKangXu"},"content":" return Deadline.create(status, description, due);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"TiwKangXu"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"TiwKangXu"},"content":" String range \u003d savedToFileLine[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"TiwKangXu"},"content":" String from \u003d range.substring(0, range.indexOf(\" to\")).replace(\"from \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"TiwKangXu"},"content":" String to \u003d range.substring(range.indexOf(\"to \")).replace(\"to \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"TiwKangXu"},"content":" return Event.create(status, description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"TiwKangXu"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidSavedToFileLineTypeException();","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":98}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeDuplicatedTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" * A class for storing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * Constructs TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" * Adds a task into TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" public void add(Task task) throws DukeDuplicatedTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" if (duplicateExist(task)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeDuplicatedTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Checks if the task entered is duplicated.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" public boolean duplicateExist(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" long duplicate \u003d tasks.stream()","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" .filter(taskInList -\u003e taskInList.toString().equals(task.toString()))","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" .count();","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" if (duplicate \u003e 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" return true;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" * Removes and returns the index-th task from TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" * Returns size of TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" * Returns the index-th task from TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" * Finds all tasks that contains keywords in their descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" * @param keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":" public String find(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":" String matchingTasks \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"TiwKangXu"},"content":" int index \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"TiwKangXu"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"TiwKangXu"},"content":" Task currentTask \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"TiwKangXu"},"content":" if (currentTask.showContent().contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"TiwKangXu"},"content":" matchingTasks +\u003d String.format(\" %d. %s\\n\", index, currentTask.toString().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"TiwKangXu"},"content":" index +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"TiwKangXu"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":90}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * User interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for list out tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" public String listOutTasksString(int index, String task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%d. %s\\n\", index, task);","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for exit.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" public String exitString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" return \" Bye~ Hope to see you again soon! \u003ew\u003c\";","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for mark.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" public String markString(String task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" Nice! I\u0027ve marked this task as done:\\n %s\", task);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for unmark.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" public String unmarkString(String task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" Ok, I\u0027ve marked this task as not done yet:\\n %s\", task);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for delete.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" * @param removedTask","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" * @param taskSize","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" public String deleteString(String removedTask, int taskSize) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" String removeNofi \u003d String.format(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" String removedDetail \u003d String.format(\" %s\", removedTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" String taskCount \u003d String.format(\" Now you have %d task(s) in the list.\", taskSize);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s\\n%s\\n%s\", removeNofi, removedDetail, taskCount);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for add task.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" * @param addedTask","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" * @param taskSize","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" public String addTaskString(String addedTask, int taskSize) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" String addNofi \u003d String.format(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" String addedDetail \u003d String.format(\" %s\", addedTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" String taskCount \u003d String.format(\" Now you have %d task(s) in the list.\", taskSize);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s\\n%s\\n%s\", addNofi, addedDetail, taskCount);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for find.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" * @param matchingTasks","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" public String findString(String matchingTasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" String findNofi \u003d String.format(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s\\n%s\", findNofi, matchingTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":79}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" private LocalDate due;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" * @param taskContent","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" * @param due","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" public Deadline(String taskContent, LocalDate due) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" super(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" * Returns task string.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" String statusAndTaskContent \u003d super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" [D] %s (by: %s)\", statusAndTaskContent, due.format(formatter));","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Creates Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @param status","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * @param description","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * @param due","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" public static Deadline create(String status, String description, String due) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" Deadline task \u003d new Deadline(description, LocalDate.parse(due));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" if (status \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"D | %s | %s\\n\", super.saveToFileLine(), due.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":50}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" * @param taskContent","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * @param from","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" * @param to","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" public Event(String taskContent, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" super(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" String statusAndTaskContent \u003d super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" [E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" statusAndTaskContent, from.format(formatter), to.format(formatter));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" * Creates Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * @param status","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @param description","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * @param from","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * @param to","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" public static Event create(String status, String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" Event task \u003d new Event(description, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" if (status \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"E | %s | from %s to %s\\n\", super.saveToFileLine(), from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":50}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Class for tasks created.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" protected DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" private String taskContent;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" public Task(String reply) {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" this.taskContent \u003d reply;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" * Marks task isDone as done.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" * Marks task isDone as not done.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" if (isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"[X] %s\", taskContent);","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"[ ] %s\", taskContent);","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" * Shows the content of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" public String showContent() {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" return taskContent;","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" * Constructs the string of a task to be saved into file.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s | %s\", isDone ? \"1\" : \"0\", taskContent);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":60}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * To Do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" public ToDo(String taskContent) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" super(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" String statusAndTaskContent \u003d super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" [T] %s\", statusAndTaskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" * Create To Do task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * @param status","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" * @param description","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" public static ToDo create(String status, String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" ToDo task \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" if (status \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"T | %s\\n\", super.saveToFileLine());","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":34}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"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-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"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":12,"author":{"gitId":"TiwKangXu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"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.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"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-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"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-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"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":14,"author":{"gitId":"TiwKangXu"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":19}},{"path":"src/test/java/duke/main/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" public void addEvent_toDo_createNewTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" assert true;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TiwKangXu":10}},{"path":"src/test/java/duke/main/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeDuplicatedTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" public void add_newTask_taskListExpands() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(new Task(\"todo a\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(new Task(\"todo b\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(taskList.size(), 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" public void remove_existingTask_taskListShrinks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" Task a \u003d new Task(\"todo a\");","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" Task b \u003d new Task(\"todo b\");","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(a);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(b);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" Task taskRemoved \u003d taskList.remove(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(taskList.size(), 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(taskRemoved, b);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TiwKangXu":46}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" * Checks if toString method returns string with correct format.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" public void toString_correctFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(toDo.toString(), \" [T] [ ] abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * Checks if create method returns correct to do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" public void create_newToDoInstance() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo1 \u003d ToDo.create(\"0\", \"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(toDo.toString(), toDo1.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" * Checks if saveToFileLine method returns string with correct format.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" public void saveToFileLine_correctFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" String saveToFileLine \u003d toDo.saveToFileLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(saveToFileLine, \"T | 0 | abc\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TiwKangXu":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"todo wakeup happily","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"todo step out of comfort zone","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"event CS2101 Lecture /from 2023-08-26 /to 2023-08-27","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"todo be engaging in class","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"todo be lazy","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"event CS2106 Tutorial /from 2003-08-18 /to 2023-08-18","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"todo pay attention to lecture","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"delete 5","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"banana~","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"banananaaaaaaa!!!!!","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"event GEC1005 Tutorial /from 0000-01-01 /to 9999-12-31","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"event LAJ2201 Tutorial /from 1998-09-07 /to 1998-10-10","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"deadline sleep /by 2023-10-21","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":18}},{"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":"TiwKangXu"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-28"},{"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":{"TiwKangXu":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"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":"TiwKangXu"},"content":"// mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":"// mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" mainClassName \u003d \"duke.Launcher\"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" archiveBaseName \u003d \"newDukeWeek5\"","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","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":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TiwKangXu":15,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"T | 0 | a","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"T | 0 | b","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"T | 0 | c","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"TiwKangXu":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" * A chatbot that helps to record tasks and store tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" private Parser parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Duke object.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" public Duke() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" this.storage \u003d new Storage(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" this.parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Runs the load function in Storage, called in MainWindow.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" public void loadByDuke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" storage.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" * Bridges GUI and Program. Takes in user command scanned by MainWindow and parses it.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" * @return chatbot\u0027s reply","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" public String getResponse(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" return parser.interact(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"TiwKangXu":46,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Launcher class that we run through IntelliJ to launch the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" * Main class starts up the GUI chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" private Image userImg \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" private Image dukeImg \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" private TextField userInput \u003d new TextField();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" private VBox dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" * The main entry point for all JavaFX applications.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" * The start method is called after the init method has returned,","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" * and after the system is ready for the application to begin running.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * NOTE: This method is called on the JavaFX Application Thread.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" * primary stages.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" * @throws Exception if something goes wrong","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" public void start(Stage stage) throws Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":58}},{"path":"src/main/java/duke/command/FirstWord.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Stores all valid command.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public enum FirstWord {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, INVALID, FIND","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":8}},{"path":"src/main/java/duke/exception/DukeDuplicatedTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles duplicated task entered.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeDuplicatedTaskException extends DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Duplicated Task!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeEmptyToDoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles creating To Do event without description.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeEmptyToDoException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Parent class of all Duke Exceptions.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return \" :\u003c OOPS! \";","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeInvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles invalid date.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeInvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Invalid date format. Date format should be YYYY-MM-DD.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":11}},{"path":"src/main/java/duke/exception/DukeInvalidMarkUnmarkArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles invalid mark / unmark argument entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"public class DukeInvalidMarkUnmarkArgumentException extends DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Wrong argument entered for mark / unmark.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/exception/DukeInvalidSavedToFileLineTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles unknown command entered.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeInvalidSavedToFileLineTypeException extends DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"Wrong task type saved in disc.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/exception/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * Handles unknown command entered.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" return super.toString() + \"I\u0027m sorry, but I don\u0027t know what that means.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":12}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"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":"TiwKangXu"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":61}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * Greets by chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" private String greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" return \" Hello! I\u0027m Jokey :) \\n What can I do for you?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" duke.loadByDuke();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" DialogBox.getDukeDialog(greet(), dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"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":51,"author":{"gitId":"TiwKangXu"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":64}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import duke.command.FirstWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeDuplicatedTaskException;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeEmptyToDoException;","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeInvalidDateFormatException;","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeInvalidMarkUnmarkArgumentException;","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeUnknownCommandException;","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" * Parses command and assigns to respective tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" private Ui ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" * Constructs a Parser object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" * @param tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" * @param storage","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" public Parser(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" * Lists out all tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" private String listOutTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" String tasksList \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" tasksList +\u003d ui.listOutTasksString(i + 1, tasks.get(i).toString().trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d tasksList;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" * Exits chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" private String exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.exitString();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" private String mark(int index) throws DukeInvalidMarkUnmarkArgumentException {","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.markString(task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidMarkUnmarkArgumentException();","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"TiwKangXu"},"content":" private String unmark(int index) throws DukeInvalidMarkUnmarkArgumentException {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"TiwKangXu"},"content":" task.unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.unmarkString(task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"TiwKangXu"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidMarkUnmarkArgumentException();","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"TiwKangXu"},"content":" * Adds a To Do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"TiwKangXu"},"content":" private String addToDo(String reply) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"TiwKangXu"},"content":" if (reply.length() \u003d\u003d \"todo\".length()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeEmptyToDoException();","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"TiwKangXu"},"content":" String taskContent \u003d reply.replace(\"todo \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d new ToDo(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"TiwKangXu"},"content":" * Adds a Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"TiwKangXu"},"content":" private String addDeadline(String reply) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"TiwKangXu"},"content":" String taskContent \u003d reply.substring(0, reply.indexOf(\" /by\")).replace(\"deadline \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"TiwKangXu"},"content":" String due \u003d reply.substring(reply.indexOf(\"/by\") + 4);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d new Deadline(taskContent, LocalDate.parse(due));","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"TiwKangXu"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"TiwKangXu"},"content":" * Adds an Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"TiwKangXu"},"content":" private String addEvent(String reply) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"TiwKangXu"},"content":" String from \u003d reply.substring(reply.indexOf(\"/from\") + 6, reply.indexOf(\" /to\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"TiwKangXu"},"content":" String to \u003d reply.substring(reply.indexOf(\"/to\") + 4);","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"TiwKangXu"},"content":" String taskContent \u003d reply.substring(0, reply.indexOf(\" /from\")).replace(\"event \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d new Event(taskContent, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"TiwKangXu"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"TiwKangXu"},"content":" * Deletes a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"TiwKangXu"},"content":" private String delete(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"TiwKangXu"},"content":" assert tasks.size() \u003e 0 : \"You have no task to delete.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"TiwKangXu"},"content":" Task removedTask \u003d tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"TiwKangXu"},"content":" storage.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.deleteString(removedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"TiwKangXu"},"content":" * Constructs message for adding task.","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"TiwKangXu"},"content":" private String addTask(Task task) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"TiwKangXu"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"TiwKangXu"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"TiwKangXu"},"content":" storage.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.addTaskString(task.toString(), tasks.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeDuplicatedTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"TiwKangXu"},"content":" private String find(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"TiwKangXu"},"content":" assert tasks.size() \u003e 0 : \"Your task list is empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"TiwKangXu"},"content":" String keyword \u003d reply.replace(\"find \", \"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"TiwKangXu"},"content":" String guiTalk \u003d ui.findString(tasks.find(keyword));","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"TiwKangXu"},"content":" return guiTalk;","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"TiwKangXu"},"content":" * Triggers respective actions.","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"TiwKangXu"},"content":" public String interact(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"TiwKangXu"},"content":" while (true) {","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"TiwKangXu"},"content":" FirstWord firstWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"TiwKangXu"},"content":" firstWord \u003d FirstWord.valueOf(reply.split(\" \")[0].toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"TiwKangXu"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"TiwKangXu"},"content":" firstWord \u003d FirstWord.INVALID;","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"TiwKangXu"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"TiwKangXu"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"TiwKangXu"},"content":" return exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"TiwKangXu"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"TiwKangXu"},"content":" return listOutTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"TiwKangXu"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"TiwKangXu"},"content":" return mark(Character.getNumericValue(reply.charAt(5) - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"TiwKangXu"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"TiwKangXu"},"content":" return unmark(Character.getNumericValue(reply.charAt(7) - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"TiwKangXu"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"TiwKangXu"},"content":" return addToDo(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"TiwKangXu"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"TiwKangXu"},"content":" return addDeadline(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"TiwKangXu"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"TiwKangXu"},"content":" return addEvent(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"TiwKangXu"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"TiwKangXu"},"content":" return delete(Character.getNumericValue(reply.charAt(7) - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"TiwKangXu"},"content":" case FIND:","lastModifiedDate":"2023-08-28"},{"lineNumber":211,"author":{"gitId":"TiwKangXu"},"content":" return find(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"TiwKangXu"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeUnknownCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"TiwKangXu"},"content":" return e.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":220}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeInvalidSavedToFileLineTypeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * A class to handle storing and loading.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Storage objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" * @param tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" public Storage(TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Saves task list into disc.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" public void save() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" String dataPath \u003d Paths.get(\"data\", \"duke.txt\").toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" File dataFile \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFile));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" String line \u003d task.saveToFileLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" writer.write(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" System.out.println(\"File duke.txt not found.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" * Loads tasks from disc into list.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" public void load() {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" String dataPath \u003d Paths.get(\"data\", \"duke.txt\").toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" File dataFile \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(dataFile));","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" for (String line; (line \u003d reader.readLine()) !\u003d null;) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" tasks.add(fileToTask(line));","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" System.out.println(\"File duke.txt not found.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" System.out.println(ex.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" * Reads from disc and constructs task string to store in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":" * @param line","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" * @return task string","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" * @throws DukeInvalidSavedToFileLineTypeException","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" private Task fileToTask(String line) throws DukeInvalidSavedToFileLineTypeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" String[] savedToFileLine \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":" String type \u003d savedToFileLine[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"TiwKangXu"},"content":" String status \u003d savedToFileLine[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"TiwKangXu"},"content":" String description \u003d savedToFileLine[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"TiwKangXu"},"content":" switch (type) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"TiwKangXu"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"TiwKangXu"},"content":" return ToDo.create(status, description);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"TiwKangXu"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"TiwKangXu"},"content":" String due \u003d savedToFileLine[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"TiwKangXu"},"content":" return Deadline.create(status, description, due);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"TiwKangXu"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"TiwKangXu"},"content":" String range \u003d savedToFileLine[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"TiwKangXu"},"content":" String from \u003d range.substring(0, range.indexOf(\" to\")).replace(\"from \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"TiwKangXu"},"content":" String to \u003d range.substring(range.indexOf(\"to \")).replace(\"to \", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"TiwKangXu"},"content":" return Event.create(status, description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"TiwKangXu"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeInvalidSavedToFileLineTypeException();","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":98}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeDuplicatedTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" * A class for storing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * Constructs TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" this.tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" * Adds a task into TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" public void add(Task task) throws DukeDuplicatedTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" if (duplicateExist(task)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" throw new DukeDuplicatedTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Checks if the task entered is duplicated.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" public boolean duplicateExist(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" long duplicate \u003d tasks.stream()","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" .filter(taskInList -\u003e taskInList.toString().equals(task.toString()))","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" .count();","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" if (duplicate \u003e 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" return true;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" * Removes and returns the index-th task from TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" * Returns size of TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" * Returns the index-th task from TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" * Finds all tasks that contains keywords in their descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" * @param keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":" public String find(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":" String matchingTasks \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"TiwKangXu"},"content":" int index \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"TiwKangXu"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"TiwKangXu"},"content":" Task currentTask \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"TiwKangXu"},"content":" if (currentTask.showContent().contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"TiwKangXu"},"content":" matchingTasks +\u003d String.format(\" %d. %s\\n\", index, currentTask.toString().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"TiwKangXu"},"content":" index +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"TiwKangXu"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":90}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * User interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for list out tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" * @param index","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for task list","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" public String listOutTasksString(int index, String task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%d. %s\\n\", index, task);","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for exit.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for exit","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" public String exitString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" return \" Bye~ Hope to see you again soon! \u003ew\u003c\";","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for mark.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for task mark","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" public String markString(String task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" Nice! I\u0027ve marked this task as done:\\n %s\", task);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for unmark.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * @param task","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for task unmark","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" public String unmarkString(String task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" Ok, I\u0027ve marked this task as not done yet:\\n %s\", task);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for delete.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" * @param removedTask","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" * @param taskSize","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for task delete","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" public String deleteString(String removedTask, int taskSize) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" String removeNofi \u003d String.format(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" String removedDetail \u003d String.format(\" %s\", removedTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" String taskCount \u003d String.format(\" Now you have %d task(s) in the list.\", taskSize);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s\\n%s\\n%s\", removeNofi, removedDetail, taskCount);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for add task.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" * @param addedTask","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" * @param taskSize","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for task add","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"TiwKangXu"},"content":" public String addTaskString(String addedTask, int taskSize) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"TiwKangXu"},"content":" String addNofi \u003d String.format(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"TiwKangXu"},"content":" String addedDetail \u003d String.format(\" %s\", addedTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"TiwKangXu"},"content":" String taskCount \u003d String.format(\" Now you have %d task(s) in the list.\", taskSize);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s\\n%s\\n%s\", addNofi, addedDetail, taskCount);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"TiwKangXu"},"content":" * Returns reply format for find.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"TiwKangXu"},"content":" * @param matchingTasks","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"TiwKangXu"},"content":" * @return message from bot for task find","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"TiwKangXu"},"content":" public String findString(String matchingTasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"TiwKangXu"},"content":" String findNofi \u003d String.format(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s\\n%s\", findNofi, matchingTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"TiwKangXu":79}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" private LocalDate due;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" * @param taskContent","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" * @param due","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" public Deadline(String taskContent, LocalDate due) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" super(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" * Returns task string.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" * @return the string of deadline event","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" String statusAndTaskContent \u003d super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" [D] %s (by: %s)\", statusAndTaskContent, due.format(formatter));","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Creates Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @param status","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * @param description","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * @param due","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @return a new deadline task","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" public static Deadline create(String status, String description, String due) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" Deadline task \u003d new Deadline(description, LocalDate.parse(due));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" if (status \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" * Constructs the line for deadline task to be saved into disc.","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" * @return the constructed string","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"D | %s | %s\\n\", super.saveToFileLine(), due.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":54}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" * @param taskContent","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * @param from","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" * @param to","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" public Event(String taskContent, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" super(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" String statusAndTaskContent \u003d super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" [E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" statusAndTaskContent, from.format(formatter), to.format(formatter));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" * Creates Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * @param status","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @param description","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" * @param from","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" * @param to","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" * @return a new event task","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" public static Event create(String status, String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" Event task \u003d new Event(description, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" if (status \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" * Constructs the line for event task to be saved into disc.","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" * @return the constructed string","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"E | %s | from %s to %s\\n\", super.saveToFileLine(), from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":55}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" * Class for tasks created.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" protected DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" private String taskContent;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" * Constructs Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" * @param reply","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" public Task(String reply) {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" this.taskContent \u003d reply;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" * Marks task isDone as done.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" * Marks task isDone as not done.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" if (isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"[X] %s\", taskContent);","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"[ ] %s\", taskContent);","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":" * Shows the content of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"TiwKangXu"},"content":" public String showContent() {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"TiwKangXu"},"content":" return taskContent;","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"TiwKangXu"},"content":" * Constructs the string of a task to be saved into file.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"TiwKangXu"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"%s | %s\", isDone ? \"1\" : \"0\", taskContent);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":60}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":" * To Do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" public ToDo(String taskContent) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" super(taskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" String statusAndTaskContent \u003d super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\" [T] %s\", statusAndTaskContent);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" * Create To Do task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * @param status","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" * @param description","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" * @return a new to do task","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" public static ToDo create(String status, String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" ToDo task \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" if (status \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" * Constructs the line for to do task to be saved into disc.","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" * @return the constructed string","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" public String saveToFileLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" return String.format(\"T | %s\\n\", super.saveToFileLine());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":39}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"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-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"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":12,"author":{"gitId":"TiwKangXu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"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.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"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-02"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"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-02"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"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":14,"author":{"gitId":"TiwKangXu"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"TiwKangXu":19}},{"path":"src/test/java/duke/main/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":" public void addEvent_toDo_createNewTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":" assert true;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TiwKangXu":10}},{"path":"src/test/java/duke/main/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.main;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"import duke.exception.DukeDuplicatedTaskException;","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" public void add_newTask_taskListExpands() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(new Task(\"todo a\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(new Task(\"todo b\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(taskList.size(), 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" public void remove_existingTask_taskListShrinks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" Task a \u003d new Task(\"todo a\");","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" Task b \u003d new Task(\"todo b\");","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(a);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"TiwKangXu"},"content":" taskList.add(b);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TiwKangXu"},"content":" } catch (DukeDuplicatedTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"TiwKangXu"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"TiwKangXu"},"content":" Task taskRemoved \u003d taskList.remove(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(taskList.size(), 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(taskRemoved, b);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TiwKangXu":46}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":" * Checks if toString method returns string with correct format.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":" public void toString_correctFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(toDo.toString(), \" [T] [ ] abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"TiwKangXu"},"content":" * Checks if create method returns correct to do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"TiwKangXu"},"content":" public void create_newToDoInstance() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo1 \u003d ToDo.create(\"0\", \"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(toDo.toString(), toDo1.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TiwKangXu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TiwKangXu"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"TiwKangXu"},"content":" * Checks if saveToFileLine method returns string with correct format.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"TiwKangXu"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"TiwKangXu"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TiwKangXu"},"content":" public void saveToFileLine_correctFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"TiwKangXu"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"TiwKangXu"},"content":" String saveToFileLine \u003d toDo.saveToFileLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"TiwKangXu"},"content":" assertEquals(saveToFileLine, \"T | 0 | abc\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"TiwKangXu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"TiwKangXu"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TiwKangXu":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TiwKangXu"},"content":"todo wakeup happily","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"TiwKangXu"},"content":"todo step out of comfort zone","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"TiwKangXu"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"TiwKangXu"},"content":"event CS2101 Lecture /from 2023-08-26 /to 2023-08-27","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"TiwKangXu"},"content":"todo be engaging in class","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"TiwKangXu"},"content":"todo be lazy","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"TiwKangXu"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"TiwKangXu"},"content":"event CS2106 Tutorial /from 2003-08-18 /to 2023-08-18","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"TiwKangXu"},"content":"todo pay attention to lecture","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"TiwKangXu"},"content":"delete 5","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"TiwKangXu"},"content":"banana~","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"TiwKangXu"},"content":"banananaaaaaaa!!!!!","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"TiwKangXu"},"content":"event GEC1005 Tutorial /from 0000-01-01 /to 9999-12-31","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"TiwKangXu"},"content":"event LAJ2201 Tutorial /from 1998-09-07 /to 1998-10-10","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"TiwKangXu"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"TiwKangXu"},"content":"deadline sleep /by 2023-10-21","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"TiwKangXu"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"TiwKangXu"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"TiwKangXu":18}},{"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":"TiwKangXu"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-28"},{"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":{"TiwKangXu":1,"-":37}}] diff --git a/TiwKangXu_ip_master/commits.json b/TiwKangXu_ip_master/commits.json index 93d49bb8..6e89bb45 100644 --- a/TiwKangXu_ip_master/commits.json +++ b/TiwKangXu_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"TiwKangXu":[{"date":"2023-08-19","commitResults":[{"hash":"4411515996d916e04ffe44a1dc6031f2cf1c6a6a","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","tags":["v0.1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-20","commitResults":[{"hash":"cc411399fe4819555c73614cc91701488bd651e2","isMergeCommit":false,"messageTitle":"Complete Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":6}}},{"hash":"a529d7f7c276ea5483da3b5d72139068706eb979","isMergeCommit":false,"messageTitle":"Complete Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":5}}},{"hash":"2d06203125c4137e75de2a773367e308c095bcaa","isMergeCommit":false,"messageTitle":"Complete Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":3}}},{"hash":"49814d47571d132e3055a3992c93bc7fec3ce3df","isMergeCommit":false,"messageTitle":"Complete Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":9}}},{"hash":"f41fd005f07c3133e87e9d28c7a7ef22af82a565","isMergeCommit":false,"messageTitle":"Complete Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":9}}},{"hash":"e5db8578d0f9181cb4173346ef8545ef1aca22a1","isMergeCommit":false,"messageTitle":"Complete A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":5,"deletions":5},"sh":{"insertions":0,"deletions":0}}},{"hash":"70f4fdfd213875e53a01fee827f143b0846e7466","isMergeCommit":false,"messageTitle":"Complete Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":24}}},{"hash":"ac93910116df1ea950bb40f2db62e106f581c6cd","isMergeCommit":false,"messageTitle":"Complete Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"40111c8bfdfcf312fe7d3a74782afac992495052","isMergeCommit":false,"messageTitle":"Complete A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":2},"java":{"insertions":50,"deletions":49}}}]},{"date":"2023-08-21","commitResults":[{"hash":"14573be422798052c408cf32d6e22fce65205cc2","isMergeCommit":false,"messageTitle":"Add Documentation","messageBody":"","tags":["Documentation"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":8}}}]},{"date":"2023-08-27","commitResults":[{"hash":"7bdd68bbe15cbe123d0f7607d8ced9dea53c798b","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":12}}},{"hash":"0479730e5966f47d3ecfd55f436439b9573f477f","isMergeCommit":false,"messageTitle":"Draft Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":7}}},{"hash":"c56d01d4d5d0776745bfcbb9fdfdd43cfbe977ef","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":48}}},{"hash":"49f22214470280aff0771eca11908289664ea48a","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":14}}},{"hash":"62b968e619ac058c91e86c99dffe86053ff1b0ab","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":5},"java":{"insertions":290,"deletions":0}}},{"hash":"58a4e179119a28bf837deded6a72a4ab5924fa28","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":6}}}]},{"date":"2023-08-28","commitResults":[{"hash":"caef5f974f062553031924b6322b2f85ef8e3027","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":232},"sh":{"insertions":1,"deletions":1}}},{"hash":"91604a9e97a8e1fb60c93066d0d641ba1aad121d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7c0e0d9d48213f69476d35a69304678d55cb185e","isMergeCommit":false,"messageTitle":"Complete A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":0}}},{"hash":"18e10ab5c36a677bf2b778efe4823fac969de469","isMergeCommit":false,"messageTitle":"Update A-JUnit","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}},{"hash":"80296a6e7726f2aedc49a814acaff939251f0454","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b2cd055f5181a67fb4da7728fcac09e30de41c2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2d72bf0042c8fc3a0319b68c2dd4dd6ce157843d","isMergeCommit":false,"messageTitle":"Complete A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":45}}},{"hash":"fa252c6f46993f7c2ab7c0c20e6e8e7e999c080a","isMergeCommit":false,"messageTitle":"Complete Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"e0748ba3dd08ab3437629487563d026e1178ed80","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ba3bc2543552ce0a23c3dbf0a88c2df7d7f82602","isMergeCommit":false,"messageTitle":"Update Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":8,"deletions":8}}},{"hash":"ed40ebf2e921499192af1b8610d23d7312728027","isMergeCommit":false,"messageTitle":"Switch to Java 11 from Java 17","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3f18d6f619e818fd917e53dfba492ae0aff5dbf","isMergeCommit":false,"messageTitle":"Add documentation.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}},{"hash":"bf5aaa307e3246c9dc6edd61b082c15c54bca792","isMergeCommit":false,"messageTitle":"Update documentation","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"265ab49fcf59556fd1c328af02119b4045c40595","isMergeCommit":false,"messageTitle":"Complete A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":2},"java":{"insertions":167,"deletions":93}}}]},{"date":"2023-09-02","commitResults":[{"hash":"e1e8767646002698771ad86d6b11a8f7b77c413f","isMergeCommit":false,"messageTitle":"Remove all JavaFX Dependencies. Clean repository.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"368dc905068268b76d5c0cc55c11bad081137e0a","isMergeCommit":false,"messageTitle":"Complete JavaFX setup","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":1}}},{"hash":"e9801aba46d3bf4fb6de0ccd2edc9afbd544f148","isMergeCommit":false,"messageTitle":"Complete adding fxml files.","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":178,"deletions":34}}},{"hash":"b0d0dd50fbfead0955106fb45a9648ba15190116","isMergeCommit":false,"messageTitle":"Complete Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":95,"deletions":82}}},{"hash":"c6945db977ec9039426a75316268cf71821937ea","isMergeCommit":false,"messageTitle":"Add invalid argument exception for mark and unmark","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":32,"deletions":28}}}]},{"date":"2023-09-10","commitResults":[{"hash":"e3eadddf8717992bb0a564a76d85c367bcaba68e","isMergeCommit":false,"messageTitle":"Complete A-CodeQuality","messageBody":"Minor flaws in achieving good code quality.\n\nGood code quality enhances readability.\n\nRefine javadocs, implement more OOP.\n\nMore OOP breaks task smaller.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":105,"deletions":37}}},{"hash":"c0edf510f0cb70bf76b89a862ec3c8db98ea7329","isMergeCommit":true,"messageTitle":"Merge pull request #1 from TiwKangXu/branch-A-CodeQuality","messageBody":"Complete A-CodeQuality","fileTypesAndContributionMap":{}},{"hash":"cd4676770f5d0c37bf109d8657434b5e39967a26","isMergeCommit":false,"messageTitle":"Complete A-Assertions","messageBody":"Current code lack assertions.\n\nAssertions define assumptions about the program state so that the runtime can verify them.\n\nAdded assertions in Parser.java.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2},"txt":{"insertions":0,"deletions":3},"java":{"insertions":8,"deletions":1}}},{"hash":"4da4227d799a35533029c0b09a47f33523ec2767","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5650dcf9d50d61c2836b15f711d278d64e84e54d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from TiwKangXu/branch-A-Assertions","messageBody":"Complete A-Assertions","fileTypesAndContributionMap":{}},{"hash":"bd236714feb2f17dfaf4d3e5c5f79e7a87e29e1f","isMergeCommit":false,"messageTitle":"Complete C-DetectDuplicates","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":16}}},{"hash":"c1fc9370c45c2ebe8d21dc8a486a4da0e8c99f24","isMergeCommit":false,"messageTitle":"Complete A-Streams","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"TiwKangXu":{"java":1100,"md":0,"fxml":35,"sh":1,"bat":0,"gradle":15,"txt":18}},"authorContributionVariance":{"TiwKangXu":43818.168},"authorDisplayNameMap":{"TiwKangXu":"CS2103T-W13-2 TIW ..G XU"}} +{"authorDailyContributionsMap":{"TiwKangXu":[{"date":"2023-08-19","commitResults":[{"hash":"4411515996d916e04ffe44a1dc6031f2cf1c6a6a","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","tags":["v0.1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-20","commitResults":[{"hash":"cc411399fe4819555c73614cc91701488bd651e2","isMergeCommit":false,"messageTitle":"Complete Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":6}}},{"hash":"a529d7f7c276ea5483da3b5d72139068706eb979","isMergeCommit":false,"messageTitle":"Complete Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":5}}},{"hash":"2d06203125c4137e75de2a773367e308c095bcaa","isMergeCommit":false,"messageTitle":"Complete Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":3}}},{"hash":"49814d47571d132e3055a3992c93bc7fec3ce3df","isMergeCommit":false,"messageTitle":"Complete Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":9}}},{"hash":"f41fd005f07c3133e87e9d28c7a7ef22af82a565","isMergeCommit":false,"messageTitle":"Complete Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":9}}},{"hash":"e5db8578d0f9181cb4173346ef8545ef1aca22a1","isMergeCommit":false,"messageTitle":"Complete A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":5,"deletions":5},"sh":{"insertions":0,"deletions":0}}},{"hash":"70f4fdfd213875e53a01fee827f143b0846e7466","isMergeCommit":false,"messageTitle":"Complete Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":24}}},{"hash":"ac93910116df1ea950bb40f2db62e106f581c6cd","isMergeCommit":false,"messageTitle":"Complete Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"40111c8bfdfcf312fe7d3a74782afac992495052","isMergeCommit":false,"messageTitle":"Complete A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":2},"java":{"insertions":50,"deletions":49}}}]},{"date":"2023-08-21","commitResults":[{"hash":"14573be422798052c408cf32d6e22fce65205cc2","isMergeCommit":false,"messageTitle":"Add Documentation","messageBody":"","tags":["Documentation"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":8}}}]},{"date":"2023-08-27","commitResults":[{"hash":"7bdd68bbe15cbe123d0f7607d8ced9dea53c798b","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":12}}},{"hash":"0479730e5966f47d3ecfd55f436439b9573f477f","isMergeCommit":false,"messageTitle":"Draft Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":7}}},{"hash":"c56d01d4d5d0776745bfcbb9fdfdd43cfbe977ef","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":48}}},{"hash":"49f22214470280aff0771eca11908289664ea48a","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":14}}},{"hash":"62b968e619ac058c91e86c99dffe86053ff1b0ab","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":5},"java":{"insertions":290,"deletions":0}}},{"hash":"58a4e179119a28bf837deded6a72a4ab5924fa28","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":6}}}]},{"date":"2023-08-28","commitResults":[{"hash":"caef5f974f062553031924b6322b2f85ef8e3027","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":232},"sh":{"insertions":1,"deletions":1}}},{"hash":"91604a9e97a8e1fb60c93066d0d641ba1aad121d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7c0e0d9d48213f69476d35a69304678d55cb185e","isMergeCommit":false,"messageTitle":"Complete A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":0}}},{"hash":"18e10ab5c36a677bf2b778efe4823fac969de469","isMergeCommit":false,"messageTitle":"Update A-JUnit","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}},{"hash":"80296a6e7726f2aedc49a814acaff939251f0454","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b2cd055f5181a67fb4da7728fcac09e30de41c2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2d72bf0042c8fc3a0319b68c2dd4dd6ce157843d","isMergeCommit":false,"messageTitle":"Complete A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":45}}},{"hash":"fa252c6f46993f7c2ab7c0c20e6e8e7e999c080a","isMergeCommit":false,"messageTitle":"Complete Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"e0748ba3dd08ab3437629487563d026e1178ed80","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ba3bc2543552ce0a23c3dbf0a88c2df7d7f82602","isMergeCommit":false,"messageTitle":"Update Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":8,"deletions":8}}},{"hash":"ed40ebf2e921499192af1b8610d23d7312728027","isMergeCommit":false,"messageTitle":"Switch to Java 11 from Java 17","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3f18d6f619e818fd917e53dfba492ae0aff5dbf","isMergeCommit":false,"messageTitle":"Add documentation.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}},{"hash":"bf5aaa307e3246c9dc6edd61b082c15c54bca792","isMergeCommit":false,"messageTitle":"Update documentation","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"265ab49fcf59556fd1c328af02119b4045c40595","isMergeCommit":false,"messageTitle":"Complete A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":2},"java":{"insertions":167,"deletions":93}}}]},{"date":"2023-09-02","commitResults":[{"hash":"e1e8767646002698771ad86d6b11a8f7b77c413f","isMergeCommit":false,"messageTitle":"Remove all JavaFX Dependencies. Clean repository.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"368dc905068268b76d5c0cc55c11bad081137e0a","isMergeCommit":false,"messageTitle":"Complete JavaFX setup","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":1}}},{"hash":"e9801aba46d3bf4fb6de0ccd2edc9afbd544f148","isMergeCommit":false,"messageTitle":"Complete adding fxml files.","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":178,"deletions":34}}},{"hash":"b0d0dd50fbfead0955106fb45a9648ba15190116","isMergeCommit":false,"messageTitle":"Complete Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":95,"deletions":82}}},{"hash":"c6945db977ec9039426a75316268cf71821937ea","isMergeCommit":false,"messageTitle":"Add invalid argument exception for mark and unmark","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":32,"deletions":28}}}]},{"date":"2023-09-10","commitResults":[{"hash":"e3eadddf8717992bb0a564a76d85c367bcaba68e","isMergeCommit":false,"messageTitle":"Complete A-CodeQuality","messageBody":"Minor flaws in achieving good code quality.\n\nGood code quality enhances readability.\n\nRefine javadocs, implement more OOP.\n\nMore OOP breaks task smaller.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":105,"deletions":37}}},{"hash":"c0edf510f0cb70bf76b89a862ec3c8db98ea7329","isMergeCommit":true,"messageTitle":"Merge pull request #1 from TiwKangXu/branch-A-CodeQuality","messageBody":"Complete A-CodeQuality","fileTypesAndContributionMap":{}},{"hash":"cd4676770f5d0c37bf109d8657434b5e39967a26","isMergeCommit":false,"messageTitle":"Complete A-Assertions","messageBody":"Current code lack assertions.\n\nAssertions define assumptions about the program state so that the runtime can verify them.\n\nAdded assertions in Parser.java.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2},"txt":{"insertions":0,"deletions":3},"java":{"insertions":8,"deletions":1}}},{"hash":"4da4227d799a35533029c0b09a47f33523ec2767","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5650dcf9d50d61c2836b15f711d278d64e84e54d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from TiwKangXu/branch-A-Assertions","messageBody":"Complete A-Assertions","fileTypesAndContributionMap":{}},{"hash":"bd236714feb2f17dfaf4d3e5c5f79e7a87e29e1f","isMergeCommit":false,"messageTitle":"Complete C-DetectDuplicates","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":16}}},{"hash":"c1fc9370c45c2ebe8d21dc8a486a4da0e8c99f24","isMergeCommit":false,"messageTitle":"Complete A-Streams","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}}]},{"date":"2023-09-18","commitResults":[{"hash":"9e85fca2843512f9b4ee583df21fde95ed6a3cd5","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Current project has minor check-style violations.\n\nEnhanced code quality improve readability.\n\nChanges on header comments for functions, library imports, and removing\ndead codes.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":32,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"TiwKangXu":{"java":1117,"md":0,"fxml":35,"sh":1,"bat":0,"gradle":15,"txt":21}},"authorContributionVariance":{"TiwKangXu":35273.492},"authorDisplayNameMap":{"TiwKangXu":"CS2103T-W13-2 TIW ..G XU"}} diff --git a/YeoBohShin_ip_master/authorship.json b/YeoBohShin_ip_master/authorship.json index 80a663a4..991749ab 100644 --- a/YeoBohShin_ip_master/authorship.json +++ b/YeoBohShin_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":"YeoBohShin"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"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":"YeoBohShin"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"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":"YeoBohShin"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"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":"YeoBohShin"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-06"},{"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":"YeoBohShin"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"YeoBohShin":21,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction for tasks that have deadlines. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /** Deadline of task. */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Constructor to make a new duke.Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the deadline task is about.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone Whether the deadline task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" * @param deadline When is the deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" public Deadline(String description, boolean isDone, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" public String getStorageDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" String isCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" return \"D \" + isCompleted + \" \" + this.description","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" + \"/by\" + this.deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" public String update(String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d specifications.split(\" \", 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" String updateType \u003d splits[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d splits.length \u003e 1 ? splits[1] : \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" switch (updateType) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" case \"/description\":","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" updateDescription(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" case \"/by\":","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" updateDeadline(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update of a deadline task description must have \"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" + \"/description \u003cdescription\u003e. \"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" + \"Update of a deadline task deadline must have /by \u003cdate\u003e.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" return \"Ok, I\u0027ve updated the deadline task to the following:\\n\" + this;","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Please add a description.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" private void validateInput(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Please add a description\");","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" if (input.contains(\"/description\") || input.contains(\"/by\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Only 1 attribute can be updated at one time.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" private void updateDescription(String description) {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" private void updateDeadline(String description) {","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" this.deadline \u003d date;","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" * Display string representation of task with deadline.","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" * @return String representation of task with deadline.","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" return \"[D]\" + super.toString() + \"(by: \"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":" + deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":90}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Duke is a chat bot that allows users to add, delete, mark, view tasks. */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private final String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" private Parser parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new Duke chat bot","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param filePath Path to file to read stored task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" this.parser \u003d new Parser(this.list, filePath);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" * Gives back a reply to an input from user.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" * @param input The command given by user.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" * @return Reply to respond to user.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" public String respond(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" return parser.parse(input).execute();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" } catch (Exception error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showError(error.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"YeoBohShin":37,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction for task that have start and end dates. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /** Start time of event. */","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" protected LocalDate start;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /** End time of event. */","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" protected LocalDate end;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new Event object.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the event is about.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone Whether the event is done or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" * @param start Start date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" * @param end End date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" public Event(String description, boolean isDone, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" public String getStorageDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" String isCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" return \"E \" + isCompleted + \" \" + this.description","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" + \"/from\" + this.start + \"/to\" + this.end;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" public String update(String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d specifications.split(\" \", 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" String updateType \u003d splits[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d splits.length \u003e 1 ? splits[1] : \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" switch (updateType) {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" case \"/description\":","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" updateDescription(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" case \"/from\":","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" updateStart(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" case \"/to\":","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" updateEnd(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update of a deadline task description must have \"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" + \"/description \u003cdescription\u003e. \"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" + \"Update of a deadline task deadline must have /by \u003cdate\u003e. \");","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" return \"Ok, I\u0027ve updated the event task to the following:\\n\" + this;","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Please add a description.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" private void validateInput(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Please add a description.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" if (input.contains(\"/description\")","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" || input.contains(\"/from\")","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":" || input.contains(\"/to\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Only 1 attribute can be updated at one time.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" private void updateDescription(String description) {","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" private void updateStart(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" this.start \u003d date;","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" private void updateEnd(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"YeoBohShin"},"content":" this.end \u003d date;","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"YeoBohShin"},"content":" * Display string representation of an event.","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"YeoBohShin"},"content":" * @return String representation of an event.","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"YeoBohShin"},"content":" return \"[E]\" + super.toString() + \"(from: \"","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"YeoBohShin"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \"","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"YeoBohShin"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":105}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":"/** Stores the task list on to the hard drive */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" private final String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" * Reads data.txt file and stores the task into a list.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" * If data.txt file does not exist, it will attempt to create a data.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" * @return The list retrieve from the file data.txt.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" Scanner fileReader \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" String task \u003d fileReader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" String[] taskDescription \u003d task.split(\" \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" String taskType \u003d taskDescription[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" boolean isDone \u003d taskDescription[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d taskDescription[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" Task toDoTask \u003d new ToDo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" list.add(toDoTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" String[] splitDeadline \u003d description.split(\"/by\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" String deadlineTaskDescription \u003d splitDeadline[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" LocalDate deadline \u003d DateParser.parseDate(splitDeadline[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" Task deadlineTask \u003d new Deadline(deadlineTaskDescription, isDone, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" list.add(deadlineTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" String[] splitEvent \u003d description.split(\"/from\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" String eventTaskDescription \u003d splitEvent[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" String[] timings \u003d splitEvent[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" LocalDate start \u003d DateParser.parseDate(timings[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" LocalDate end \u003d DateParser.parseDate(timings[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" Task eventTask \u003d new Event(eventTaskDescription, isDone, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" list.add(eventTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS! Something went wrong\");","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" fileReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" return list;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" } catch (FileNotFoundException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" createFile(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":" * Creates a file named data.txt.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" * @param filePath Path to the file data.txt.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" public void createFile(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" load();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Oops! Something went wrong!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":" * Goes through all task stored in list and updates the hard drive.","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"YeoBohShin"},"content":" * @param filePath Path to the file data.txt.","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"YeoBohShin"},"content":" public static void updateStorage(String filePath, TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"YeoBohShin"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"YeoBohShin"},"content":" for (int i \u003d 0; i \u003c list.length(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d list.retrieve(i).getStorageDescription();","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"YeoBohShin"},"content":" writer.write(description + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"YeoBohShin"},"content":" writer.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Oops! Something went wrong!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"YeoBohShin":106}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a Task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /** Description of the task. */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" /** State of task if completed or not. */","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new Task object.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the task is about.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" * Marks the task if state of task is completed.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" * @return \"X\" if completed empty string if otherwise.","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" * */","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" /** Changes the state of task to completed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" public String markAsDone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskMarked(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" /** Changes the state of task to not completed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" public String markAsUndone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskUnmarked(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" * Gets the string representation of the task for storage in hard drive.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" * @return The string representation for storage purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" public abstract String getStorageDescription();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" * Updates details of a task.","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications What to update.","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" * @return Notifying the user that task has been updated.","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" public abstract String update(String specifications);","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" * Displays string representation of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" * @return String representation.","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a list that can store Tasks */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" /** List to store tasks */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private List\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @param taskList List containing the task to store.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" * Marks the task input by users.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" * @param index Index of task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" * */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String mark(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c this.list.size() : \"Task must exist in the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" return this.list.get(index).markAsDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I could not find any task in that position.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" * Unmarks the task input by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" * @param index Index of task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" public String unmark(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c this.list.size() : \"Task must exist in the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" return this.list.get(index).markAsUndone();","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I could not find any task in that position.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" * Stores the task into the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be added to list.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" public void store(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" * Removes the task specified by the index inputed.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" * @param index Position of the task that is to be removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" assert !this.list.isEmpty() : \"Cannot delete from empty list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" * Gets the task at the specific index of the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" * @param index Position of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" * @return The task at the index position.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" public Task retrieve(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c this.list.size() : \"Task must exist in the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":" * Returns length of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" * @return Length of list.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" public int length() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" return this.list.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" /** Prints out the list of tasks stored. */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":" public String printList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder printedList \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":" for (int index \u003d 0; index \u003c this.list.size(); index++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"YeoBohShin"},"content":" Task item \u003d this.list.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d (index + 1) + \". \" + item.toString() + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"YeoBohShin"},"content":" printedList.append(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"YeoBohShin"},"content":" return printedList.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"YeoBohShin"},"content":" * Finds all task with word that similar to user input and prints it out to them.","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"YeoBohShin"},"content":" * @param filterWord Word to be matched with task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"YeoBohShin"},"content":" public String find(String filterWord) {","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"YeoBohShin"},"content":" this.list.stream()","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"YeoBohShin"},"content":" .filter(task -\u003e task.description.contains(filterWord))","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"YeoBohShin"},"content":" .forEach(task -\u003e reply.append(task + \"\\n\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"YeoBohShin":111}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a task that has no deadline */","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" * Creates a task with no deadline","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the task is about.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public String getStorageDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" String isCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" return \"T \" + isCompleted + \" \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" public String update(String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update of todo task needs a description\");","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d specifications;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" return \"Ok, I\u0027ve updated the todo task to the following:\\n\" + this;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":35}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Ui prints statements that the user will interact with */","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /** Creates a new Ui object. */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" public Ui() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" /** Greets the user. */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" public void greet() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" System.out.println(\"Hello! I\u0027m Aikent\\n\" + \"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Bids farewell to users.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @return Farewell text to user.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public String farewell() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" return \"I have saved all your task!\\nBye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" * Prints the error message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" * @param errorMsg Message to be printed.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" public String showError(String errorMsg) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" return errorMsg;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" * Informs the user that task is successfully added to list.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be added to list.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" * @param listSize Size of the list after task is added.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskAdded(Task task, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"Now you have \");","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" reply.append(listSize);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\" tasks in the list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" * Informs the user that task is successfully deleted from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be deleted from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" * @param listSize Size of list after deleting task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskDeleted(Task task, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"Now you have \");","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" reply.append(listSize);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\" tasks in the list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" * Informs user that the desired task has been marked as completed.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskMarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" * Informs the user that the desired task has been unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"YeoBohShin":86}},{"path":"src/main/java/duke/command/AddDeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add a deadline task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"public class AddDeadlineTask extends AddTask {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to a deadline task to a list.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List that deadline task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the deadline task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public AddDeadlineTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" super(list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d this.specifications.split(\"/by\", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d splits[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(splits[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" Task deadlineTask \u003d new Deadline(description, false, date);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" this.list.store(deadlineTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskAdded(deadlineTask, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! The description of a deadline must have \u003ctask\u003e /by \u003ctime\u003e.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":38}},{"path":"src/main/java/duke/command/AddEventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Event;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add an event task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"public class AddEventTask extends AddTask {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to add an event task to a list.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List that event task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public AddEventTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" super(list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" String[] split \u003d specifications.split(\"/from\", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" String event \u003d split[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" String[] timings \u003d split[1].split(\"/to\", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" LocalDate start \u003d DateParser.parseDate(timings[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" LocalDate end \u003d DateParser.parseDate(timings[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" Task eventTask \u003d new Event(event, false, start, end);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" this.list.store(eventTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskAdded(eventTask, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! The description of an event must have \u003ctask\u003e /from \u003cstart\u003e /to \u003cend\u003e.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":40}},{"path":"src/main/java/duke/command/AddTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add a task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public abstract class AddTask extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" protected Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" protected TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" protected String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to add task to a list.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List that task will be added to.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public AddTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":24}},{"path":"src/main/java/duke/command/AddToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.ToDo;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add a task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class AddToDoTask extends AddTask {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" * Creates a add todo task command.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * @param list List for the todo task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the todo task.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" public AddToDoTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" super(list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" Task toDoTask \u003d new ToDo(specifications, false);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" this.list.store(toDoTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskAdded(toDoTask, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":29}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to carry out a command input by user. */","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /** Perform a specific command given a specific input by user */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":8}},{"path":"src/main/java/duke/command/DeleteTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to delete a task from a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class DeleteTask extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a DeleteTask command.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing the task to delete.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Index of task to be deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public DeleteTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate task number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" int number \u003d Integer.parseInt(specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" Task taskToRemove \u003d this.list.retrieve(number - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" this.list.delete(number - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskDeleted(taskToRemove, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I could not find any task in that position.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":39}},{"path":"src/main/java/duke/command/Farewell.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to bid farewell to the user. */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"public class Farewell extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" public Farewell() {}","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.farewell();","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":16}},{"path":"src/main/java/duke/command/FindTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of command to list out task matching user desired search input. */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"public class FindTask extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" * Creates a FindTask command to find task matching user input.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing task to be filtered.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Input that task should match with.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public FindTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate word to find\");","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" return this.list.find(specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":29}},{"path":"src/main/java/duke/command/Mark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction for marking a task as completed. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class Mark extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * Creates a Mark command that will tell the user that the task has been marked.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param list The list containing the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Index of the task to be marked.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Mark(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate task number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" int index \u003d Integer.parseInt(specifications) - 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return this.list.mark(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":32}},{"path":"src/main/java/duke/command/PrintList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to print out a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class PrintList extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command that can print out list.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param list List to be printed out.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public PrintList(TaskList list) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" return this.list.printList();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":25}},{"path":"src/main/java/duke/command/Unmark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to unmark a task of a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class Unmark extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to mark a task as incomplete.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing task to be unmarked.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Index of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Unmark(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate task number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" int index \u003d Integer.parseInt(specifications) - 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return this.list.unmark(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":32}},{"path":"src/main/java/duke/command/UpdateTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to update the content of a task. */","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class UpdateTask extends Command {","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Creates a commant that will update a task.","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing the task to be updated.","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of how to update the task.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" public UpdateTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d this.specifications.split(\" \", 2);","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" String taskIndex \u003d splits[0];","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" Integer index \u003d Integer.parseInt(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" Task task \u003d this.list.retrieve(index - 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return task.update(splits[1]);","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Please ensure that task is in list \"","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" + \"or add the description to be updated\");","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" } catch (NumberFormatException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update has to be in format \"","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" + \"update \u003cindex\u003e \u003cdescription\u003e.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"YeoBohShin":39}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":61}},{"path":"src/main/java/duke/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":12}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" private Duke duke \u003d new Duke(\"./src/main/java/duke/data.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":32}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" String response \u003d duke.respond(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":54}},{"path":"src/main/java/duke/parser/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.parser;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to parse dates */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class DateParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" * Parses dates and ensure is in the right format.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * @param dateInput Date to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @return LocalDate object if input is in correct format.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" public static LocalDate parseDate(String dateInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d LocalDate.parse(dateInput.trim(), DateTimeFormatter.ISO_LOCAL_DATE);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" return date;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" } catch (DateTimeParseException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Date format have to be in yyyy-mm-dd\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"YeoBohShin":25}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.parser;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.AddDeadlineTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.AddEventTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.AddToDoTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.DeleteTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Farewell;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.FindTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Mark;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.PrintList;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Unmark;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.UpdateTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to understand user input */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":"public class Parser {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" private String filepath;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" * Creates a parser to parse commands inputed by user.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" * @param list List to be updated by each command.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" public Parser(TaskList list, String filepath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" * Parses the input of the user.","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" * @param msg Inputed string by user.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" * @return Whether the bot should wait for next command or stop.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" public Command parse(String msg) {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" String[] input \u003d msg.split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" String command \u003d input[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" String specifications \u003d input.length \u003e 1 ? input[1] : \"\";","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" switch (command) {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" case \"bye\":","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" Storage.updateStorage(this.filepath, this.list);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" return new Farewell();","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" case \"list\":","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" return new PrintList(this.list);","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" case \"mark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" return new Mark(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" return new Unmark(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" case \"todo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" return new AddToDoTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" return new AddDeadlineTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" return new AddEventTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" case \"delete\":","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" return new DeleteTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" case \"find\":","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" return new FindTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" case \"update\":","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" return new UpdateTask(this.list, specifications);","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":72}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"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.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":19}},{"path":"src/test/java/duke/DateParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"public class DateParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" public void dateParse_correctDateFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(\"2023-12-23\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"2023-12-23\", date.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public void dateParse_wrongDateFormat_errorMessageThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(\"2023-13-1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" } catch (IllegalArgumentException error) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"OOPS!!! Date format have to be in yyyy-mm-dd\", error.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"YeoBohShin":28}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" public void test_markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" ToDo task \u003d new ToDo(\"testing\", false);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(true, task.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public void test_toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" ToDo task \u003d new ToDo(\"testing\", false);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"[T][ ] testing\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"YeoBohShin":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"todo start 2103T testing","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"deadline 2103T tut /by next week","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"event 2101 project meeting /from now /to later","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":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":"-"},"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":"YeoBohShin"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-21"},{"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":{"YeoBohShin":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"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":"YeoBohShin"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"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":"YeoBohShin"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"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":"YeoBohShin"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-06"},{"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":"YeoBohShin"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"YeoBohShin":21,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction for tasks that have deadlines. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /** Deadline of task. */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Constructor to make a new duke.Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the deadline task is about.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone Whether the deadline task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" * @param deadline When is the deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" public Deadline(String description, boolean isDone, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" public String getStorageDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" String isCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" return \"D \" + isCompleted + \" \" + this.description","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" + \"/by\" + this.deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" public String update(String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d specifications.split(\" \", 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" String updateType \u003d splits[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d splits.length \u003e 1 ? splits[1] : \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" switch (updateType) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" case \"/description\":","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" updateDescription(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" case \"/by\":","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" updateDeadline(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update of a deadline task description must have \"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" + \"/description \u003cdescription\u003e. \"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" + \"Update of a deadline task deadline must have /by \u003cdate\u003e.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" return \"Ok, I\u0027ve updated the deadline task to the following:\\n\" + this;","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Please add a description.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" private void validateInput(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Please add a description\");","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" if (input.contains(\"/description\") || input.contains(\"/by\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Only 1 attribute can be updated at one time.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" private void updateDescription(String description) {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" private void updateDeadline(String description) {","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" this.deadline \u003d date;","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" * Display string representation of task with deadline.","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" * @return String representation of task with deadline.","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" return \"[D]\" + super.toString() + \"(by: \"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":" + deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":90}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Duke is a chat bot that allows users to add, delete, mark, view tasks. */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private final String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" private Parser parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new Duke chat bot","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param filePath Path to file to read stored task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" this.parser \u003d new Parser(this.list, filePath);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" * Gives back a reply to an input from user.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" * @param input The command given by user.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" * @return Reply to respond to user.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" public String respond(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" return parser.parse(input).execute();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" } catch (Exception error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showError(error.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"YeoBohShin":37,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction for task that have start and end dates. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /** Start time of event. */","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" protected LocalDate start;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /** End time of event. */","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" protected LocalDate end;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new Event object.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the event is about.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone Whether the event is done or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" * @param start Start date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" * @param end End date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" public Event(String description, boolean isDone, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" public String getStorageDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" String isCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" return \"E \" + isCompleted + \" \" + this.description","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" + \"/from\" + this.start + \"/to\" + this.end;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" public String update(String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d specifications.split(\" \", 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" String updateType \u003d splits[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d splits.length \u003e 1 ? splits[1] : \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" switch (updateType) {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" case \"/description\":","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" updateDescription(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" case \"/from\":","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" updateStart(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" case \"/to\":","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" validateInput(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" updateEnd(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update of a deadline task description must have \"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" + \"/description \u003cdescription\u003e. \"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" + \"Update of a deadline task deadline must have /by \u003cdate\u003e. \");","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" return \"Ok, I\u0027ve updated the event task to the following:\\n\" + this;","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Please add a description.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" private void validateInput(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Please add a description.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" if (input.contains(\"/description\")","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" || input.contains(\"/from\")","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":" || input.contains(\"/to\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! Only 1 attribute can be updated at one time.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" private void updateDescription(String description) {","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" private void updateStart(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" this.start \u003d date;","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" private void updateEnd(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"YeoBohShin"},"content":" this.end \u003d date;","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"YeoBohShin"},"content":" * Display string representation of an event.","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"YeoBohShin"},"content":" * @return String representation of an event.","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"YeoBohShin"},"content":" return \"[E]\" + super.toString() + \"(from: \"","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"YeoBohShin"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \"","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"YeoBohShin"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":105}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":"/** Stores the task list on to the hard drive */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" private final String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" * Reads data.txt file and stores the task into a list.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" * If data.txt file does not exist, it will attempt to create a data.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" * @return The list retrieve from the file data.txt.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" Scanner fileReader \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" String task \u003d fileReader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" String[] taskDescription \u003d task.split(\" \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" String taskType \u003d taskDescription[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" boolean isDone \u003d taskDescription[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d taskDescription[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" Task toDoTask \u003d new ToDo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" list.add(toDoTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" String[] splitDeadline \u003d description.split(\"/by\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" String deadlineTaskDescription \u003d splitDeadline[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" LocalDate deadline \u003d DateParser.parseDate(splitDeadline[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" Task deadlineTask \u003d new Deadline(deadlineTaskDescription, isDone, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" list.add(deadlineTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" String[] splitEvent \u003d description.split(\"/from\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" String eventTaskDescription \u003d splitEvent[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" String[] timings \u003d splitEvent[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" LocalDate start \u003d DateParser.parseDate(timings[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" LocalDate end \u003d DateParser.parseDate(timings[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" Task eventTask \u003d new Event(eventTaskDescription, isDone, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" list.add(eventTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS! Something went wrong\");","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" fileReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" return list;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" } catch (FileNotFoundException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" createFile(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":" * Creates a file named data.txt.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" * @param filePath Path to the file data.txt.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" public void createFile(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" load();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Oops! Something went wrong!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":" * Goes through all task stored in list and updates the hard drive.","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"YeoBohShin"},"content":" * @param filePath Path to the file data.txt.","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"YeoBohShin"},"content":" public static void updateStorage(String filePath, TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"YeoBohShin"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"YeoBohShin"},"content":" for (int i \u003d 0; i \u003c list.length(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d list.retrieve(i).getStorageDescription();","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"YeoBohShin"},"content":" writer.write(description + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"YeoBohShin"},"content":" writer.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Oops! Something went wrong!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"YeoBohShin":106}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a Task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /** Description of the task. */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" /** State of task if completed or not. */","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new Task object.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the task is about.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" * Marks the task if state of task is completed.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" * @return \"X\" if completed empty string if otherwise.","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" * */","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" /** Changes the state of task to completed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" public String markAsDone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskMarked(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" /** Changes the state of task to not completed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" public String markAsUndone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskUnmarked(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" * Gets the string representation of the task for storage in hard drive.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" * @return The string representation for storage purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" public abstract String getStorageDescription();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" * Updates details of a task.","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications What to update.","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" * @return Notifying the user that task has been updated.","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" public abstract String update(String specifications);","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" * Displays string representation of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" * @return String representation.","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a list that can store Tasks */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" /** List to store tasks */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private List\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Creates a new TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param taskList List containing the task to store.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" * Marks the task input by users.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" * @param index Index of task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" * */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" public String mark(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c this.list.size() : \"Task must exist in the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" return this.list.get(index).markAsDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I could not find any task in that position.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" * Unmarks the task input by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" * @param index Index of task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" public String unmark(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c this.list.size() : \"Task must exist in the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" return this.list.get(index).markAsUndone();","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I could not find any task in that position.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" * Stores the task into the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be added to list.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" public void store(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" * Removes the task specified by the index inputed.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" * @param index Position of the task that is to be removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" assert !this.list.isEmpty() : \"Cannot delete from empty list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" * Gets the task at the specific index of the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" * @param index Position of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" * @return The task at the index position.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":" public Task retrieve(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c this.list.size() : \"Task must exist in the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" * Returns length of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" * @return Length of list.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" public int length() {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":" return this.list.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"YeoBohShin"},"content":" /** Prints out the list of tasks stored. */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"YeoBohShin"},"content":" public String printList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder printedList \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"YeoBohShin"},"content":" for (int index \u003d 0; index \u003c this.list.size(); index++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"YeoBohShin"},"content":" Task item \u003d this.list.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d (index + 1) + \". \" + item.toString() + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"YeoBohShin"},"content":" printedList.append(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"YeoBohShin"},"content":" return printedList.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"YeoBohShin"},"content":" * Finds all task with word that similar to user input and prints it out to them.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"YeoBohShin"},"content":" * @param filterWord Word to be matched with task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"YeoBohShin"},"content":" public String find(String filterWord) {","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"YeoBohShin"},"content":" List\u003cTask\u003e filteredList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"YeoBohShin"},"content":" for (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"YeoBohShin"},"content":" Task task \u003d this.list.get(i);","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"YeoBohShin"},"content":" if (task.description.contains(filterWord)) {","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"YeoBohShin"},"content":" filteredList.add(task);","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":113,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"YeoBohShin"},"content":" for (int i \u003d 0; i \u003c filteredList.size(); i++) {","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"YeoBohShin"},"content":" String taskDescription \u003d (i + 1) + \". \" + filteredList.get(i) + \"\\n\";","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"YeoBohShin"},"content":" reply.append(taskDescription);","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"YeoBohShin":120}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a task that has no deadline */","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" * Creates a task with no deadline","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" * @param description What the task is about.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" * @param isDone whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public String getStorageDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" String isCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" return \"T \" + isCompleted + \" \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" public String update(String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update of todo task needs a description\");","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" this.description \u003d specifications;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" return \"Ok, I\u0027ve updated the todo task to the following:\\n\" + this;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":35}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Ui prints statements that the user will interact with */","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /** Creates a new Ui object. */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" public Ui() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" /** Greets the user. */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" public void greet() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" System.out.println(\"Hello! I\u0027m Aikent\\n\" + \"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Bids farewell to users.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @return Farewell text to user.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public String farewell() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" return \"I have saved all your task!\\nBye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" * Prints the error message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" * @param errorMsg Message to be printed.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" public String showError(String errorMsg) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" return errorMsg;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" * Informs the user that task is successfully added to list.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be added to list.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" * @param listSize Size of the list after task is added.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskAdded(Task task, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"Now you have \");","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" reply.append(listSize);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\" tasks in the list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" * Informs the user that task is successfully deleted from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be deleted from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" * @param listSize Size of list after deleting task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskDeleted(Task task, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\"Now you have \");","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" reply.append(listSize);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" reply.append(\" tasks in the list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" * Informs user that the desired task has been marked as completed.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskMarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"YeoBohShin"},"content":" * Informs the user that the desired task has been unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"YeoBohShin"},"content":" * @param task Task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"YeoBohShin"},"content":" public String showTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"YeoBohShin"},"content":" StringBuilder reply \u003d new StringBuilder(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"YeoBohShin"},"content":" reply.append(task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"YeoBohShin"},"content":" return reply.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"YeoBohShin":86}},{"path":"src/main/java/duke/command/AddDeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add a deadline task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"public class AddDeadlineTask extends AddTask {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to a deadline task to a list.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List that deadline task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the deadline task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public AddDeadlineTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" super(list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d this.specifications.split(\"/by\", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" String description \u003d splits[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(splits[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" Task deadlineTask \u003d new Deadline(description, false, date);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" this.list.store(deadlineTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskAdded(deadlineTask, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! The description of a deadline must have \u003ctask\u003e /by \u003ctime\u003e.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":38}},{"path":"src/main/java/duke/command/AddEventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Event;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add an event task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"public class AddEventTask extends AddTask {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to add an event task to a list.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List that event task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public AddEventTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" super(list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" String[] split \u003d specifications.split(\"/from\", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" String event \u003d split[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" String[] timings \u003d split[1].split(\"/to\", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" LocalDate start \u003d DateParser.parseDate(timings[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" LocalDate end \u003d DateParser.parseDate(timings[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" Task eventTask \u003d new Event(event, false, start, end);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" this.list.store(eventTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskAdded(eventTask, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" } catch (ArrayIndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" \"OOPS!!! The description of an event must have \u003ctask\u003e /from \u003cstart\u003e /to \u003cend\u003e.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":40}},{"path":"src/main/java/duke/command/AddTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add a task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public abstract class AddTask extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" protected Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" protected TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" protected String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to add task to a list.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List that task will be added to.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public AddTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":24}},{"path":"src/main/java/duke/command/AddToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.ToDo;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to add a task to a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class AddToDoTask extends AddTask {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" * Creates a add todo task command.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * @param list List for the todo task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of the todo task.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" public AddToDoTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" super(list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" Task toDoTask \u003d new ToDo(specifications, false);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" this.list.store(toDoTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskAdded(toDoTask, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":29}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to carry out a command input by user. */","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" /** Perform a specific command given a specific input by user */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":8}},{"path":"src/main/java/duke/command/DeleteTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to delete a task from a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class DeleteTask extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * Creates a DeleteTask command.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing the task to delete.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Index of task to be deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public DeleteTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate task number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" int number \u003d Integer.parseInt(specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" Task taskToRemove \u003d this.list.retrieve(number - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" this.list.delete(number - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.showTaskDeleted(taskToRemove, this.list.length());","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I could not find any task in that position.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":39}},{"path":"src/main/java/duke/command/Farewell.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to bid farewell to the user. */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"public class Farewell extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" public Farewell() {}","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" return this.ui.farewell();","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":16}},{"path":"src/main/java/duke/command/FindTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of command to list out task matching user desired search input. */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"public class FindTask extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" * Creates a FindTask command to find task matching user input.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing task to be filtered.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Input that task should match with.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public FindTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate word to find\");","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" return this.list.find(specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":29}},{"path":"src/main/java/duke/command/Mark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction for marking a task as completed. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class Mark extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * Creates a Mark command that will tell the user that the task has been marked.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param list The list containing the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Index of the task to be marked.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Mark(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate task number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" int index \u003d Integer.parseInt(specifications) - 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return this.list.mark(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":32}},{"path":"src/main/java/duke/command/PrintList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to print out a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class PrintList extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command that can print out list.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param list List to be printed out.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public PrintList(TaskList list) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" return this.list.printList();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":25}},{"path":"src/main/java/duke/command/Unmark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction of a command to unmark a task of a list. */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class Unmark extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * Creates a command to mark a task as incomplete.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing task to be unmarked.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Index of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" public Unmark(TaskList list, String specifications) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" if (specifications.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"Please indicate task number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" int index \u003d Integer.parseInt(specifications) - 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return this.list.unmark(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":32}},{"path":"src/main/java/duke/command/UpdateTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.command;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to update the content of a task. */","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"public class UpdateTask extends Command {","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" private String specifications;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Creates a commant that will update a task.","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" * @param list List containing the task to be updated.","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" * @param specifications Description of how to update the task.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" public UpdateTask(TaskList list, String specifications) {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" this.specifications \u003d specifications;","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" public String execute() {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" String[] splits \u003d this.specifications.split(\" \", 2);","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" String taskIndex \u003d splits[0];","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" Integer index \u003d Integer.parseInt(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" Task task \u003d this.list.retrieve(index - 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" return task.update(splits[1]);","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" } catch (IndexOutOfBoundsException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Please ensure that task is in list \"","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" + \"or add the description to be updated\");","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" } catch (NumberFormatException error) {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Update has to be in format \"","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" + \"update \u003cindex\u003e \u003cdescription\u003e.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"YeoBohShin":39}},{"path":"src/main/java/duke/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"T 0 this","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"T 0 done","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"YeoBohShin":2}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":61}},{"path":"src/main/java/duke/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":12}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" private Duke duke \u003d new Duke(\"./src/main/java/duke/data.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":32}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" String response \u003d duke.respond(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":54}},{"path":"src/main/java/duke/parser/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.parser;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to parse dates */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class DateParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" * Parses dates and ensure is in the right format.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" * @param dateInput Date to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" * @return LocalDate object if input is in correct format.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" public static LocalDate parseDate(String dateInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d LocalDate.parse(dateInput.trim(), DateTimeFormatter.ISO_LOCAL_DATE);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" return date;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" } catch (DateTimeParseException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! Date format have to be in yyyy-mm-dd\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"YeoBohShin":25}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke.parser;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.AddDeadlineTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.AddEventTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.AddToDoTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.DeleteTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Farewell;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.FindTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Mark;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.PrintList;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.Unmark;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":"import duke.command.UpdateTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"/** Abstraction to understand user input */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":"public class Parser {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" private TaskList list;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" private String filepath;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" * Creates a parser to parse commands inputed by user.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" * @param list List to be updated by each command.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" public Parser(TaskList list, String filepath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" * Parses the input of the user.","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"YeoBohShin"},"content":" * @param msg Inputed string by user.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"YeoBohShin"},"content":" * @return Whether the bot should wait for next command or stop.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"YeoBohShin"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"YeoBohShin"},"content":" public Command parse(String msg) {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"YeoBohShin"},"content":" String[] input \u003d msg.split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"YeoBohShin"},"content":" String command \u003d input[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"YeoBohShin"},"content":" String specifications \u003d input.length \u003e 1 ? input[1] : \"\";","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"YeoBohShin"},"content":" switch (command) {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"YeoBohShin"},"content":" case \"bye\":","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"YeoBohShin"},"content":" Storage.updateStorage(this.filepath, this.list);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"YeoBohShin"},"content":" return new Farewell();","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"YeoBohShin"},"content":" case \"list\":","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"YeoBohShin"},"content":" return new PrintList(this.list);","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"YeoBohShin"},"content":" case \"mark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"YeoBohShin"},"content":" return new Mark(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"YeoBohShin"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"YeoBohShin"},"content":" return new Unmark(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"YeoBohShin"},"content":" case \"todo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"YeoBohShin"},"content":" return new AddToDoTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"YeoBohShin"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"YeoBohShin"},"content":" return new AddDeadlineTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"YeoBohShin"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"YeoBohShin"},"content":" return new AddEventTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"YeoBohShin"},"content":" case \"delete\":","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"YeoBohShin"},"content":" return new DeleteTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"YeoBohShin"},"content":" case \"find\":","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"YeoBohShin"},"content":" return new FindTask(this.list, specifications);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"YeoBohShin"},"content":" case \"update\":","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"YeoBohShin"},"content":" return new UpdateTask(this.list, specifications);","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"YeoBohShin"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"YeoBohShin"},"content":" throw new IllegalArgumentException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"YeoBohShin":72}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"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.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"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-07"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"YeoBohShin":19}},{"path":"src/test/java/duke/DateParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"import duke.parser.DateParser;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"public class DateParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" public void dateParse_correctDateFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(\"2023-12-23\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"2023-12-23\", date.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" public void dateParse_wrongDateFormat_errorMessageThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" LocalDate date \u003d DateParser.parseDate(\"2023-13-1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" } catch (IllegalArgumentException error) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"OOPS!!! Date format have to be in yyyy-mm-dd\", error.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"YeoBohShin":28}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"import java.util.List;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" public void test_storeTaskToList() {","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":" TaskList list \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" list.store(new ToDo(\"testing\", false));","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(1, list.length());","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":" public void test_deleteTaskFromList() {","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"YeoBohShin"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"YeoBohShin"},"content":" list.add(new ToDo(\"testing\", false));","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"YeoBohShin"},"content":" TaskList taskList \u003d new TaskList(list);","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"YeoBohShin"},"content":" taskList.delete(0);","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(0, taskList.length());","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"YeoBohShin"},"content":" public void test_findTask() {","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"YeoBohShin"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"YeoBohShin"},"content":" list.add(new ToDo(\"testing\", false));","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"YeoBohShin"},"content":" list.add(new ToDo(\"done\", false));","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"YeoBohShin"},"content":" TaskList taskList \u003d new TaskList(list);","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"Here are the matching tasks in your list:\\n1. [T][ ] done\\n\",","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"YeoBohShin"},"content":" taskList.find(\"done\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"YeoBohShin":38}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"YeoBohShin"},"content":" public void test_markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"YeoBohShin"},"content":" ToDo task \u003d new ToDo(\"testing\", false);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"YeoBohShin"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(true, task.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"YeoBohShin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"YeoBohShin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"YeoBohShin"},"content":" public void test_toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"YeoBohShin"},"content":" ToDo task \u003d new ToDo(\"testing\", false);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"YeoBohShin"},"content":" assertEquals(\"[T][ ] testing\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"YeoBohShin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"YeoBohShin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"YeoBohShin":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"YeoBohShin"},"content":"todo start 2103T testing","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"YeoBohShin"},"content":"deadline 2103T tut /by next week","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"YeoBohShin"},"content":"event 2101 project meeting /from now /to later","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"YeoBohShin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"YeoBohShin"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"YeoBohShin"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"YeoBohShin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"YeoBohShin"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"YeoBohShin":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":"-"},"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":"YeoBohShin"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-21"},{"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":{"YeoBohShin":1,"-":37}}] diff --git a/YeoBohShin_ip_master/commits.json b/YeoBohShin_ip_master/commits.json index f6c67860..de66411d 100644 --- a/YeoBohShin_ip_master/commits.json +++ b/YeoBohShin_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"YeoBohShin":[{"date":"2023-08-20","commitResults":[{"hash":"625970b8b95dd5284346a11be4f10c67f02be3e0","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"9db3807fe3e9c15f50c3a8a341e7ed14f62d7ed6","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}}]},{"date":"2023-08-21","commitResults":[{"hash":"0da65806e8166ca452f483919cb2ba5a5a18792d","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"005a43518f294311e3f34c33b2bfd3cf1eea378e","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":6}}},{"hash":"99e98e79478cba7ae504e3721660fc049c3f4455","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":2}}},{"hash":"7d647d9c5265230b96be182017a8c3641a8e24eb","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":2,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"1bf20828f0794e9cfd8badf3b8fa3b10aa0c5df3","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":37}}},{"hash":"e3e52ac7387d85cbf862b088c9401a517a4f0248","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"63f2ba45324b89ba2e49dedad731e11ef3d32b54","isMergeCommit":false,"messageTitle":"Added documentations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":21}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6a702c83636882ef41924ac0a5c65e5ab163dafe","isMergeCommit":false,"messageTitle":"Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":247,"deletions":100}}},{"hash":"59120cec2cda5782bb99345760521a579cccd035","isMergeCommit":false,"messageTitle":"Banish data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6}}},{"hash":"a7d2ced1f75672c2c8cf07d1dd16f18f018c269d","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":13}}}]},{"date":"2023-08-31","commitResults":[{"hash":"2aa6bfe8db074bde3674da5665f33e2447dd121a","isMergeCommit":false,"messageTitle":"Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":293,"deletions":226}}},{"hash":"4ea9f1895c9efa4bf942722c023ea5696e1b2b5f","isMergeCommit":false,"messageTitle":"Organize into Package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":5}}},{"hash":"697727509b1ab4daec9e3a20c5d081902e30810a","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["branch-A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"766b7d660a7ee4dfdc43f1072a5eab992db47b5a","isMergeCommit":false,"messageTitle":"Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":8,"deletions":2},"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"871c247d89dccca3fc68563331a839e5bdb2c751","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":0}}},{"hash":"2ee49d409f0750714d57fd357ade519adf5056ed","isMergeCommit":false,"messageTitle":"Create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"14aeff538c3797404c57266edf444b959fe1c189","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"1cd77fd537703fe3111a3f0cd973a8c7f4a2d4d0","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":5}}},{"hash":"0588d64f60903b48e354db6c8764b1e488fb433b","isMergeCommit":false,"messageTitle":"Follow codingstandards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":11}}},{"hash":"e563530e4c3d0c203bad2a1176a1c36ca7fce063","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-javadocs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e961d9379b5ff21493063c35f2d37c76d0eb516","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4fcdd55145ffb51a5ebc20e28855d48f29691e5","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1ee1ac09a22f3a6dd1593d622ccd55378ebb4caa","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":73,"deletions":46}}}]},{"date":"2023-09-07","commitResults":[{"hash":"fe862c95c7ab70dec35ff25ec002aa1ee20694c0","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":249,"deletions":105}}},{"hash":"8cd8b39105a2b53fdfd8c2025f98b8d70868a291","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-GUI\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"8cf3aee138f0effca06a6a0eb2c68c67e5856f73","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Assertions are needed to maintain the correctness of the code.\n\nAssertions added to check if index of task is valid before adjusting the task list.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":4}}},{"hash":"999f2d94e7ef4df36da5c63c6e2bc30f7fffee03","isMergeCommit":true,"messageTitle":"Merge pull request #1 from YeoBohShin/branch-assertions","messageBody":"Add assertions","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"a3aea432a2d8047fe00b1763136f649ae3a4016c","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Made the code more cleaner and more readable.\n\nBreakdown methods into different level of abstactions for better understanding\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":416,"deletions":121}}},{"hash":"a5efe912f441359f0cb97e3d0de2a7d09afea71c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from YeoBohShin/branch-codequality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"d331d02550d5297ff00d3eaa448e21501f89b390","isMergeCommit":false,"messageTitle":"Add extensions","messageBody":"","tags":["C-Update"],"fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":10}}},{"hash":"b49a2895e2a7a84d4919466f258d14ed1804bfeb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from YeoBohShin/branch-update","messageBody":"Add extensions","fileTypesAndContributionMap":{}},{"hash":"b450cfb5babb0e1f454ef2a7d603c4dfeee1cf5b","isMergeCommit":false,"messageTitle":"Conform to codequality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":22}}}]},{"date":"2023-09-14","commitResults":[{"hash":"de8c4732a66992172e98fcad70f2d3b0daf966cc","isMergeCommit":false,"messageTitle":"Fix bugs regarding update function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":39}}}]},{"date":"2023-09-16","commitResults":[{"hash":"2072dcc2083749f02f3048cea876c9dd86af76d3","isMergeCommit":false,"messageTitle":"Follows javadocs coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"YeoBohShin":{"java":1295,"md":0,"fxml":38,"sh":1,"bat":0,"gradle":21,"txt":8}},"authorContributionVariance":{"YeoBohShin":27523.758},"authorDisplayNameMap":{"YeoBohShin":"CS2103T-T11-1 YEO ..SHIN"}} +{"authorDailyContributionsMap":{"YeoBohShin":[{"date":"2023-08-20","commitResults":[{"hash":"625970b8b95dd5284346a11be4f10c67f02be3e0","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"9db3807fe3e9c15f50c3a8a341e7ed14f62d7ed6","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}}]},{"date":"2023-08-21","commitResults":[{"hash":"0da65806e8166ca452f483919cb2ba5a5a18792d","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"005a43518f294311e3f34c33b2bfd3cf1eea378e","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":6}}},{"hash":"99e98e79478cba7ae504e3721660fc049c3f4455","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":2}}},{"hash":"7d647d9c5265230b96be182017a8c3641a8e24eb","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":2,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"1bf20828f0794e9cfd8badf3b8fa3b10aa0c5df3","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":37}}},{"hash":"e3e52ac7387d85cbf862b088c9401a517a4f0248","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"63f2ba45324b89ba2e49dedad731e11ef3d32b54","isMergeCommit":false,"messageTitle":"Added documentations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":21}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6a702c83636882ef41924ac0a5c65e5ab163dafe","isMergeCommit":false,"messageTitle":"Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":247,"deletions":100}}},{"hash":"59120cec2cda5782bb99345760521a579cccd035","isMergeCommit":false,"messageTitle":"Banish data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6}}},{"hash":"a7d2ced1f75672c2c8cf07d1dd16f18f018c269d","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":13}}}]},{"date":"2023-08-31","commitResults":[{"hash":"2aa6bfe8db074bde3674da5665f33e2447dd121a","isMergeCommit":false,"messageTitle":"Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":293,"deletions":226}}},{"hash":"4ea9f1895c9efa4bf942722c023ea5696e1b2b5f","isMergeCommit":false,"messageTitle":"Organize into Package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":5}}},{"hash":"697727509b1ab4daec9e3a20c5d081902e30810a","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["branch-A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"766b7d660a7ee4dfdc43f1072a5eab992db47b5a","isMergeCommit":false,"messageTitle":"Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":8,"deletions":2},"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"871c247d89dccca3fc68563331a839e5bdb2c751","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":0}}},{"hash":"2ee49d409f0750714d57fd357ade519adf5056ed","isMergeCommit":false,"messageTitle":"Create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"14aeff538c3797404c57266edf444b959fe1c189","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"1cd77fd537703fe3111a3f0cd973a8c7f4a2d4d0","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":5}}},{"hash":"0588d64f60903b48e354db6c8764b1e488fb433b","isMergeCommit":false,"messageTitle":"Follow codingstandards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":11}}},{"hash":"e563530e4c3d0c203bad2a1176a1c36ca7fce063","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-javadocs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e961d9379b5ff21493063c35f2d37c76d0eb516","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4fcdd55145ffb51a5ebc20e28855d48f29691e5","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1ee1ac09a22f3a6dd1593d622ccd55378ebb4caa","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":73,"deletions":46}}}]},{"date":"2023-09-07","commitResults":[{"hash":"fe862c95c7ab70dec35ff25ec002aa1ee20694c0","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":249,"deletions":105}}},{"hash":"8cd8b39105a2b53fdfd8c2025f98b8d70868a291","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-GUI\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"8cf3aee138f0effca06a6a0eb2c68c67e5856f73","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Assertions are needed to maintain the correctness of the code.\n\nAssertions added to check if index of task is valid before adjusting the task list.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":4}}},{"hash":"999f2d94e7ef4df36da5c63c6e2bc30f7fffee03","isMergeCommit":true,"messageTitle":"Merge pull request #1 from YeoBohShin/branch-assertions","messageBody":"Add assertions","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"a3aea432a2d8047fe00b1763136f649ae3a4016c","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Made the code more cleaner and more readable.\n\nBreakdown methods into different level of abstactions for better understanding\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":416,"deletions":121}}},{"hash":"a5efe912f441359f0cb97e3d0de2a7d09afea71c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from YeoBohShin/branch-codequality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"d331d02550d5297ff00d3eaa448e21501f89b390","isMergeCommit":false,"messageTitle":"Add extensions","messageBody":"","tags":["C-Update"],"fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":10}}},{"hash":"b49a2895e2a7a84d4919466f258d14ed1804bfeb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from YeoBohShin/branch-update","messageBody":"Add extensions","fileTypesAndContributionMap":{}},{"hash":"b450cfb5babb0e1f454ef2a7d603c4dfeee1cf5b","isMergeCommit":false,"messageTitle":"Conform to codequality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":22}}}]},{"date":"2023-09-14","commitResults":[{"hash":"de8c4732a66992172e98fcad70f2d3b0daf966cc","isMergeCommit":false,"messageTitle":"Fix bugs regarding update function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":39}}}]},{"date":"2023-09-16","commitResults":[{"hash":"2072dcc2083749f02f3048cea876c9dd86af76d3","isMergeCommit":false,"messageTitle":"Follows javadocs coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-18","commitResults":[{"hash":"a75e4ce6954eb9e60c0fc034946d139f4eb0eabe","isMergeCommit":false,"messageTitle":"Adds testing for tasklist and updates find function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":50,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"YeoBohShin":{"java":1342,"md":0,"fxml":38,"sh":1,"bat":0,"gradle":21,"txt":10}},"authorContributionVariance":{"YeoBohShin":26142.848},"authorDisplayNameMap":{"YeoBohShin":"CS2103T-T11-1 YEO ..SHIN"}} diff --git a/applepiofmyeye_ip_master/authorship.json b/applepiofmyeye_ip_master/authorship.json index e4b01125..5cf20c4c 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":"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":"applepiofmyeye"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-07"},{"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":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"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":"applepiofmyeye"},"content":" mainClass.set(\"seedu.Barbie\")","lastModifiedDate":"2023-09-01"},{"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":"applepiofmyeye"},"content":" archiveBaseName \u003d \"barbie\"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":"ext {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" mainClassName \u003d \u0027seedu.Barbie\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" archiveFileName \u003d \u0027barbie.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"applepiofmyeye":30,"-":40}},{"path":"src/main/java/barbie/Barbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" * Implements the main Barbie chatbot logic.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class Barbie {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" Parser parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" MainWindow mainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" boolean doExit;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * Constructs an instance of Barbie.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public Barbie() {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" this.taskList \u003d Storage.getLastList();","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" this.doExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * Gets the doExit variable -- to see if the application should exit or not.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * @return whether the application should exit","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" public boolean getDoExit() {","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" return this.doExit;","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" * Gets barbie\u0027s response to the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" * @param input user input","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" * @return barbie\u0027s response","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" protected String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" String toPrint;","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" toPrint \u003d command.run(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" if (command instanceof ExitCommand) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" this.doExit \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" return toPrint;","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" protected String greet() {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.intro(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":63}},{"path":"src/main/java/barbie/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * Constructs an instance of a DialogBox.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * @param text text of the DialogBox","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * @param img profile picture of the person","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" dialog.setPadding(new Insets(0, 10, 0, 10));","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" Circle circle \u003d new Circle();","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" circle.setRadius(50.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" circle.setCenterX(50.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" circle.setCenterY(50.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" displayPicture.setClip(circle);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" * Gets the DialogBox for the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" * @param text user\u0027s input","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" * @param img user\u0027s profile picture","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" * @return DialogBox object for the user","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" * Gets the DialogBox for Barbie.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" * @param text Barbie\u0027s response","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" * @param img Barbie\u0027s profile picture","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" * @return DialogBox object for Barbie","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":87}},{"path":"src/main/java/barbie/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class Launcher {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":12}},{"path":"src/main/java/barbie/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" private Barbie barbie \u003d new Barbie();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * The main entry point for all JavaFX applications. The start method is called after the init method has returned, and after the system is ready for the application to begin running.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * NOTE: This method is called on the JavaFX Application Thread.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" * primary stages.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBarbie(barbie);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" stage.show();","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":40}},{"path":"src/main/java/barbie/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" private Barbie barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Elizabeth.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Barbie.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises the main window.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" * Sets the barbie bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" * @param b barbie instance","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" public void setBarbie(Barbie b) {","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" barbie \u003d b;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Barbie\u0027s reply.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" String response \u003d barbie.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" if (barbie.getDoExit()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" Platform.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":67}},{"path":"src/main/java/barbie/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.DeadlineCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.DeleteCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.FindCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.ListCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.MarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.PartyCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.TodoCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.UnmarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a class which parses input.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"public class Parser {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for the Parser class.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" public Parser() {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * Parse input given to return the command used.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * @param input text input of the user","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" * @return command to be executed based on the text parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" * @throws BarbieException thrown in the commands","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" public Command parse(String input) throws BarbieException {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" String inputCommand \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" switch (parts[0].toLowerCase()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" case \"del\":","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" taskNumber \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" case \"mark\": return new MarkCommand(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" case \"unmark\": return new UnmarkCommand(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" case \"del\": return new DeleteCommand(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" case \"party\":","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDescException();","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts2 \u003d parts[1].split(\"/\");","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDeadlineException();","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by \u003d LocalDate.parse(parts2[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" return new DeadlineCommand(desc, by);","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" case \"party\":","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 3) {","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoTimingException();","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate from \u003d LocalDate.parse(parts2[1].strip());","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate to \u003d LocalDate.parse(parts2[2].strip());","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" return new PartyCommand(desc, from, to);","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" return new TodoCommand(desc);","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" case \"list\": return new ListCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" case \"find\":","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoKeywordException();","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" String keyword \u003d parts[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoSuchCommandException();","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieDateTimeFormatException();","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":117}},{"path":"src/main/java/barbie/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Deadlines;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Party;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * This class deals with all file reading and writing.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" static Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * The type is also always Todo, as it takes in the \"desc\" parameter only.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(String desc) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"T\" + \",\" + 0 + \",\" + desc + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" }","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":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"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":53,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" * @param deadline the deadline the task has to be completed by","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(String desc, LocalDate deadline) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"D\" + \",\" + 0 + \",\" + desc + \",\" + deadline + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"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":73,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"P\" + \",\" + 0 + \",\" + desc + \",\" + from + \",\" + to + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" * Returns the latest list from the storage file upon starting up.","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" * @return the last list loaded from the storage file","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getLastList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e finalList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A new list created for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"-------------------------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A current list is being used for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" Files.readAllLines(path).forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" String[] taskParts \u003d x.split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" String taskType \u003d taskParts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" String taskStatus \u003d taskParts[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d taskParts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" if (Objects.equals(taskType, \"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Deadlines(desc, LocalDate.parse(taskParts[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"P\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Party(desc, LocalDate.parse(taskParts[3]), LocalDate.parse(taskParts[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Task(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" if (Integer.parseInt(taskStatus) \u003d\u003d 1) {","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" task.mark();","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" finalList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(finalList);","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"applepiofmyeye"},"content":" }","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":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"applepiofmyeye"},"content":" return finalList;","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" * Changes the status of a Task in the storage file.","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"applepiofmyeye"},"content":" * @param status status to change the current Task to","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToChange the Task number to change","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"applepiofmyeye"},"content":" public static void changeLineStatus(String status, int lineToChange) {","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToChange \u003e\u003d 0 \u0026\u0026 lineToChange \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"applepiofmyeye"},"content":" String[] newContent \u003d lines.get(lineToChange).split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"applepiofmyeye"},"content":" newContent[1] \u003d status;","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"applepiofmyeye"},"content":" lines.set(lineToChange, Arrays.stream(newContent).reduce(\"\", (x, acc) -\u003e x + \",\" + acc));","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to change.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"applepiofmyeye"},"content":" * Deletes the line of the task from the list, and shifts the rest accordingly.","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToDelete the Task number to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" public static void deleteLine(int lineToDelete) {","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToDelete \u003e\u003d 0 \u0026\u0026 lineToDelete \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":" lines.remove(lineToDelete);","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to delete.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"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-30"}],"authorContributionMap":{"applepiofmyeye":182}},{"path":"src/main/java/barbie/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieListEmptyException;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Takes care of the UI related messages that will be displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"public class Ui {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Introduces the chatbot to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of Tasks that should be done today","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" protected static String intro(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"I\u0027m Barbie!\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"This is the list of things you have today!\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + list.stream().map(x -\u003e x.toString() + \"\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nWhat can I do for you?\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * Greets the user before ending the chat.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" public static String exit() {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Bye Barbie! Bye Ken!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully added.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was added to the list","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" public static String taskAdded(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Got you barbie! I\u0027ve added this task to your Barbie list:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" + \" \" + task);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as done","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" public static String mark(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" public static String unmark(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Alright! I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" public static String del() {","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" return (\" Deletion success! I\u0027ve deleted this task off your list.\" );","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" * Prints the Task in numerical order, or that there is no Task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" public static String listTasks(ArrayList\u003cTask\u003e list) throws BarbieListEmptyException {","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieListEmptyException();","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" String listInString \u003d \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" // \"list\" command","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d i + 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" listInString +\u003d (\"\\n\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" return listInString;","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" * Finds tasks with the given keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" * @param keyword keyword to compare against","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" * @return string of items listed","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" public static String findTasks(ArrayList\u003cTask\u003e list, String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" String toPrint \u003d (\"These are your tasks with the keyword: \" + keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" String taskDesc \u003d list.get(i).toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" int index \u003d taskDesc.indexOf(keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" if (index \u003e\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" toPrint +\u003d (\"\\n\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" itemNumber++;","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" if (itemNumber \u003d\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Hmm.. There doesn\u0027t seem to be any matching tasks!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" return toPrint;","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":124}},{"path":"src/main/java/barbie/Utils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Deadlines;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Party;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"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":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * Abstracts any helper functions that will be used in the main function.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"public class Utils {","lastModifiedDate":"2023-08-30"},{"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":" * Retrieves the list of Tasks that should be done today.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * @param date date of the Tasks to retrieve","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * @param lastList latest list of Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * @return the list of Tasks that should be done today","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getDateList(LocalDate date, ArrayList\u003cTask\u003e lastList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e thisDatesList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" lastList.forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" if (x instanceof Deadlines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines y \u003d (Deadlines) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" thisDatesList.add(y);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" } else if (x instanceof Party) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" Party y \u003d (Party) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" thisDatesList.add(y);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"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-08-30"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" return thisDatesList;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":48}},{"path":"src/main/java/barbie/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Represents all the command abstractly.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * All commands will inherit from this class.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" boolean isExit;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * Runs the command of this instance of Command.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * (eg ExitCommand will contain the logic of exiting the application)","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * @param taskList current list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * @return barbie\u0027s output in a String format","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public abstract String run(ArrayList\u003cTask\u003e taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":21}},{"path":"src/main/java/barbie/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Deadlines;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public DeadlineCommand(String desc, LocalDate by) {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines deadline \u003d new Deadlines(this.desc, this.by);","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(desc, by);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.taskAdded(deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":32}},{"path":"src/main/java/barbie/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieException;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieListEmptyException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieTaskNumberException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" return new BarbieListEmptyException().getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" taskList.remove(this.taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" Storage.deleteLine(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.del() + \"\\n\" + taskList.get(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":31}},{"path":"src/main/java/barbie/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":19}},{"path":"src/main/java/barbie/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" String keyword;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.findTasks(taskList, this.keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":20}},{"path":"src/main/java/barbie/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.listTasks(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/barbie/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" Task task \u003d taskList.get(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" task.mark();","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(\"1\", taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.mark(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/main/java/barbie/commands/PartyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Party;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"public class PartyCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate from;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate to;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" public PartyCommand(String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" Party party \u003d new Party(this.desc, this.from, this.to);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" taskList.add(party);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(this.desc, this.from, this.to);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.taskAdded(party);","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":34}},{"path":"src/main/java/barbie/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" public TodoCommand(String desc) {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" Todo todo \u003d new Todo(this.desc);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" taskList.add(todo);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(this.desc);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.taskAdded(todo);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":27}},{"path":"src/main/java/barbie/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" Task task \u003d taskList.get(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" task.unmark();","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(\"0\", taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.unmark(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/barbie/exceptions/BarbieDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception when the date and time format given is incorrect.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieDateTimeFormatException extends BarbieException {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieDateTimeFormatException.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieDateTimeFormatException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Remember to put your deadlines or event timings in the format YYYY-DD-MM alright!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":14}},{"path":"src/main/java/barbie/exceptions/BarbieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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(\"Barbie Error!!\\n\" + message);","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieListEmptyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieListEmptyException extends BarbieException {","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieListEmptyException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":8}},{"path":"src/main/java/barbie/exceptions/BarbieNoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieNoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieNoKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a missing keyword error","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoKeywordException extends BarbieException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a Barbie exception when there is no keyword associated with the \u0027find\u0027 command.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoKeywordException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"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 \"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027find \u003ckeyword\u003e\u0027!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":14}},{"path":"src/main/java/barbie/exceptions/BarbieNoSuchCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a \"no such command\" error.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoSuchCommandException extends BarbieException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Represents an exception that is thrown when there is no clear command the user is asking.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoSuchCommandException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" super(\"There seems to be no matching command for what you\u0027re asking.. these are the following commands \"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" + \"you can use!\\n\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t1. todo \u003ctask\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t2. deadline \u003ctask\u003e /\u003cdeadline\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t3. party \u003cparty name\u003e /\u003cstart\u003e /\u003cend\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t4. mark \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t5. unmark \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t6. list\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t7. find \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t8. del \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t9. bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/barbie/exceptions/BarbieNoTimingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/types/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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/barbie/types/Party.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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-16"},{"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-09-16"},{"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/barbie/types/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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/barbie/types/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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 Task {","lastModifiedDate":"2023-09-16"},{"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/main/resources/view/Dialogbox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"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\"barbie.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":19}},{"path":"src/test/java/TestStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Storage class.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"public class TestStorage {","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 Storage::addToList is able to add a description with commas.","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 testAddToListCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, \"do, work,\");","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e list \u003d Files.readAllLines(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d list.get(list.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"T,0,do, work,\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if the Storage::getLastList is able to return a task of description \"do\" for an incorrect","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" * input of do, work.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" public void testGetListWithCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e oldList \u003d Storage.getLastList();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d oldList.get(oldList.size() - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"[T][ ] do\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":48}},{"path":"src/test/java/TestUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.PrintStream;","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 barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * NO LONGER USABLE after Level 10 iteration.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Ui class.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUi {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" public void setUp() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"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":25,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" public void testIntroEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" String greeting \u003d (line","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" String question \u003d (\"\\nWhat can I do for you?\\n\" + line + \"\\n[you]:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d greeting + \"\\n\" + question;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if an empty file list will print the prompt to add Tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyFileList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(new ArrayList\u003c\u003e(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"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":55,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":58}},{"path":"src/test/java/TestUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Utils;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Utils class.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUtils {","lastModifiedDate":"2023-09-03"},{"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":" * Tests if Utils::getDateList is able to return an empty list when the current list is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Utils","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" .getDateList(LocalDate.parse(\"2023-08-20\"), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(list.size(), 0);","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"}],"authorContributionMap":{"applepiofmyeye":27}},{"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,by milo","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":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":"applepiofmyeye"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-07"},{"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":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"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":"applepiofmyeye"},"content":" mainClass.set(\"seedu.Barbie\")","lastModifiedDate":"2023-09-01"},{"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":"applepiofmyeye"},"content":" archiveBaseName \u003d \"barbie\"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":"ext {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" mainClassName \u003d \u0027seedu.Barbie\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" archiveFileName \u003d \u0027barbie.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"applepiofmyeye":30,"-":40}},{"path":"src/main/java/barbie/Barbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" * Implements the main Barbie chatbot logic.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class Barbie {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" Parser parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" MainWindow mainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" boolean doExit;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * Constructs an instance of Barbie.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public Barbie() {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" this.taskList \u003d Storage.getLastList();","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" this.doExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * Gets the doExit variable -- to see if the application should exit or not.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * @return whether the application should exit","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" public boolean getDoExit() {","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" return this.doExit;","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" * Gets barbie\u0027s response to the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" * @param input user input","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" * @return barbie\u0027s response","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" protected String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" String toPrint;","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" toPrint \u003d command.run(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" if (command instanceof ExitCommand) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" this.doExit \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" return toPrint;","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" protected String greet() {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.intro(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":63}},{"path":"src/main/java/barbie/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * Constructs an instance of a DialogBox.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * @param text text of the DialogBox","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * @param img profile picture of the person","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" dialog.setPadding(new Insets(0, 10, 0, 10));","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" Circle circle \u003d new Circle();","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" circle.setRadius(50.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" circle.setCenterX(50.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" circle.setCenterY(50.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" displayPicture.setClip(circle);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" * Gets the DialogBox for the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" * @param text user\u0027s input","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" * @param img user\u0027s profile picture","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" * @return DialogBox object for the user","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" * Gets the DialogBox for Barbie.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" * @param text Barbie\u0027s response","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" * @param img Barbie\u0027s profile picture","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" * @return DialogBox object for Barbie","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":87}},{"path":"src/main/java/barbie/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class Launcher {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":12}},{"path":"src/main/java/barbie/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" private Barbie barbie \u003d new Barbie();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * The main entry point for all JavaFX applications. The start method is called after the init method has returned, and after the system is ready for the application to begin running.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * NOTE: This method is called on the JavaFX Application Thread.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" * primary stages.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBarbie(barbie);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" stage.show();","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":40}},{"path":"src/main/java/barbie/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" private Barbie barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Elizabeth.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Barbie.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises the main window.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" * Sets the barbie bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" * @param b barbie instance","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" public void setBarbie(Barbie b) {","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" barbie \u003d b;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Barbie\u0027s reply.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" String response \u003d barbie.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" if (barbie.getDoExit()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" Platform.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":67}},{"path":"src/main/java/barbie/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.DeadlineCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.DeleteCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.FindCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.ListCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.MarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.PartyCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.TodoCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.commands.UnmarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a class which parses input.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"public class Parser {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for the Parser class.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" public Parser() {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * Parse input given to return the command used.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" * @param input text input of the user","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" * @return command to be executed based on the text parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" * @throws BarbieException thrown in the commands","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" public Command parse(String input) throws BarbieException {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" String inputCommand \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" switch (parts[0].toLowerCase()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" case \"del\":","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" taskNumber \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" case \"mark\": return new MarkCommand(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" case \"unmark\": return new UnmarkCommand(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" case \"del\": return new DeleteCommand(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" case \"party\":","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDescException();","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts2 \u003d parts[1].split(\"/\");","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDeadlineException();","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by \u003d LocalDate.parse(parts2[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" return new DeadlineCommand(desc, by);","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" case \"party\":","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 3) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoTimingException();","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate from \u003d LocalDate.parse(parts2[1].strip());","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate to \u003d LocalDate.parse(parts2[2].strip());","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" return new PartyCommand(desc, from, to);","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" return new TodoCommand(desc);","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" case \"list\": return new ListCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" case \"find\":","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoKeywordException();","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" String keyword \u003d parts[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoSuchCommandException();","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieDateTimeFormatException();","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":118}},{"path":"src/main/java/barbie/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Deadlines;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Party;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * This class deals with all file reading and writing.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" static Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * The type is also always Todo, as it takes in the \"desc\" parameter only.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(String desc) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" assert Objects.equals(desc.split(\" \", 2)[0], \"T\") : \"Item added should be a T class\";","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"T\" + \",\" + 0 + \",\" + desc + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"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":55,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" * @param deadline the deadline the task has to be completed by","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(String desc, LocalDate deadline) {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" assert Objects.equals(desc.split(\" \", 2)[0], \"D\") : \"Item added should be a D class\";","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"D\" + \",\" + 0 + \",\" + desc + \",\" + deadline + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"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-09-05"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"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":77,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" assert Objects.equals(desc.split(\" \", 2)[0], \"P\") : \"Item added should be a P class\";","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"P\" + \",\" + 0 + \",\" + desc + \",\" + from + \",\" + to + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" * Returns the latest list from the storage file upon starting up.","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" * @return the last list loaded from the storage file","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getLastList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e finalList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A new list created for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"-------------------------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A current list is being used for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" Files.readAllLines(path).forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" String[] taskParts \u003d x.split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" String taskType \u003d taskParts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" String taskStatus \u003d taskParts[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d taskParts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" if (Objects.equals(taskType, \"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Deadlines(desc, LocalDate.parse(taskParts[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"P\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Party(desc, LocalDate.parse(taskParts[3]), LocalDate.parse(taskParts[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Task(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":" if (Integer.parseInt(taskStatus) \u003d\u003d 1) {","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"applepiofmyeye"},"content":" task.mark();","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"applepiofmyeye"},"content":" finalList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(finalList);","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" return finalList;","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"applepiofmyeye"},"content":" * Changes the status of a Task in the storage file.","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"applepiofmyeye"},"content":" * @param status status to change the current Task to","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToChange the Task number to change","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"applepiofmyeye"},"content":" public static void changeLineStatus(String status, int lineToChange) {","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToChange \u003e\u003d 0 \u0026\u0026 lineToChange \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"applepiofmyeye"},"content":" String[] newContent \u003d lines.get(lineToChange).split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"applepiofmyeye"},"content":" newContent[1] \u003d status;","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"applepiofmyeye"},"content":" lines.set(lineToChange, Arrays.stream(newContent).reduce(\"\", (x, acc) -\u003e x + \",\" + acc));","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to change.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":" * Deletes the line of the task from the list, and shifts the rest accordingly.","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToDelete the Task number to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":" public static void deleteLine(int lineToDelete) {","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":" assert lines.size() \u003e 0 : \"Current task list should not be empty\";","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToDelete \u003e\u003d 0 \u0026\u0026 lineToDelete \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":" lines.remove(lineToDelete);","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"applepiofmyeye"},"content":" if (lines.size() \u003e 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to delete.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"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-30"}],"authorContributionMap":{"applepiofmyeye":191}},{"path":"src/main/java/barbie/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieListEmptyException;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Takes care of the UI related messages that will be displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"public class Ui {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Introduces the chatbot to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of Tasks that should be done today","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" protected static String intro(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"I\u0027m Barbie!\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"This is the list of things you have today!\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + list.stream().map(x -\u003e x.toString() + \"\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nWhat can I do for you?\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * Greets the user before ending the chat.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" public static String exit() {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Bye Barbie! Bye Ken!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully added.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was added to the list","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" public static String taskAdded(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Got you barbie! I\u0027ve added this task to your Barbie list:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" + \" \" + task);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as done","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" public static String mark(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" public static String unmark(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Alright! I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" public static String del() {","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" return (\" Deletion success! I\u0027ve deleted this task off your list.\" );","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" * Prints the Task in numerical order, or that there is no Task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" public static String listTasks(ArrayList\u003cTask\u003e list) throws BarbieListEmptyException {","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieListEmptyException();","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" String listInString \u003d \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" // \"list\" command","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d i + 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" listInString +\u003d (\"\\n\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" return listInString;","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" * Finds tasks with the given keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" * @param keyword keyword to compare against","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" * @return string of items listed","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" public static String findTasks(ArrayList\u003cTask\u003e list, String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" String toPrint \u003d (\"These are your tasks with the keyword: \" + keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" String taskDesc \u003d list.get(i).toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" int index \u003d taskDesc.indexOf(keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" if (index \u003e\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" toPrint +\u003d (\"\\n\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" itemNumber++;","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" if (itemNumber \u003d\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" return (\"Hmm.. There doesn\u0027t seem to be any matching tasks!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" return toPrint;","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":124}},{"path":"src/main/java/barbie/Utils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Deadlines;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Party;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"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":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * Abstracts any helper functions that will be used in the main function.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"public class Utils {","lastModifiedDate":"2023-08-30"},{"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":" * Retrieves the list of Tasks that should be done today.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * @param date date of the Tasks to retrieve","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * @param lastList latest list of Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * @return the list of Tasks that should be done today","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getDateList(LocalDate date, ArrayList\u003cTask\u003e lastList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e thisDatesList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" lastList.forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" if (x instanceof Deadlines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines y \u003d (Deadlines) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" thisDatesList.add(y);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" } else if (x instanceof Party) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" Party y \u003d (Party) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" thisDatesList.add(y);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"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-08-30"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" return thisDatesList;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":48}},{"path":"src/main/java/barbie/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Represents all the command abstractly.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * All commands will inherit from this class.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" boolean isExit;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * Runs the command of this instance of Command.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * (eg ExitCommand will contain the logic of exiting the application)","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * @param taskList current list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * @return barbie\u0027s output in a String format","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public abstract String run(ArrayList\u003cTask\u003e taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":21}},{"path":"src/main/java/barbie/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Deadlines;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public DeadlineCommand(String desc, LocalDate by) {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines deadline \u003d new Deadlines(this.desc, this.by);","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(desc, by);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.taskAdded(deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":32}},{"path":"src/main/java/barbie/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieException;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieListEmptyException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieTaskNumberException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" return new BarbieListEmptyException().getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" String taskToDel \u003d taskList.get(taskNumber).toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" taskList.remove(this.taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" Storage.deleteLine(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.del() + \"\\n\" + taskToDel;","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":33}},{"path":"src/main/java/barbie/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":19}},{"path":"src/main/java/barbie/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" String keyword;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.findTasks(taskList, this.keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":20}},{"path":"src/main/java/barbie/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.listTasks(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/barbie/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" Task task \u003d taskList.get(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" task.mark();","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(\"1\", taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.mark(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/main/java/barbie/commands/PartyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Party;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"public class PartyCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate from;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate to;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" public PartyCommand(String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" Party party \u003d new Party(this.desc, this.from, this.to);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" taskList.add(party);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(this.desc, this.from, this.to);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.taskAdded(party);","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":34}},{"path":"src/main/java/barbie/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" String desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" public TodoCommand(String desc) {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" Todo todo \u003d new Todo(this.desc);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" taskList.add(todo);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(this.desc);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.taskAdded(todo);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":27}},{"path":"src/main/java/barbie/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" public String run(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" Task task \u003d taskList.get(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" task.unmark();","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(\"0\", taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" return Ui.unmark(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/barbie/exceptions/BarbieDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception when the date and time format given is incorrect.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieDateTimeFormatException extends BarbieException {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieDateTimeFormatException.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieDateTimeFormatException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Remember to put your deadlines or event timings in the format YYYY-DD-MM alright!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":14}},{"path":"src/main/java/barbie/exceptions/BarbieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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(\"Barbie Error!!\\n\" + message);","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieListEmptyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieListEmptyException extends BarbieException {","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieListEmptyException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":8}},{"path":"src/main/java/barbie/exceptions/BarbieNoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieNoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieNoKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a missing keyword error","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoKeywordException extends BarbieException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a Barbie exception when there is no keyword associated with the \u0027find\u0027 command.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoKeywordException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"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 \"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027find \u003ckeyword\u003e\u0027!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":14}},{"path":"src/main/java/barbie/exceptions/BarbieNoSuchCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents a \"no such command\" error.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoSuchCommandException extends BarbieException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Represents an exception that is thrown when there is no clear command the user is asking.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoSuchCommandException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" super(\"There seems to be no matching command for what you\u0027re asking.. these are the following commands \"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" + \"you can use!\\n\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t1. todo \u003ctask\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t2. deadline \u003ctask\u003e /\u003cdeadline\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t3. party \u003cparty name\u003e /\u003cstart\u003e /\u003cend\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t4. mark \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t5. unmark \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t6. list\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t7. find \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t8. del \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t9. bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/barbie/exceptions/BarbieNoTimingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/exceptions/BarbieTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.exceptions;","lastModifiedDate":"2023-09-16"},{"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/barbie/types/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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/barbie/types/Party.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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-16"},{"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-09-16"},{"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/barbie/types/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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/barbie/types/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie.types;","lastModifiedDate":"2023-09-16"},{"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 Task {","lastModifiedDate":"2023-09-16"},{"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/main/resources/view/Dialogbox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"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\"barbie.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"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-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":19}},{"path":"src/test/java/barbie/TestStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","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.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Storage class.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"public class TestStorage {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if the Storage::addToList is able to add a description with commas.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" public void testAddToListCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(\"do, work,\");","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e list \u003d Files.readAllLines(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d list.get(list.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"T,0,do, work,\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" }","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-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if the Storage::getLastList is able to return a task of description \"do\" for an incorrect","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" * input of do, work.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" public void testGetListWithCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e oldList \u003d Storage.getLastList();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d oldList.get(oldList.size() - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"[T][ ] do\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":50}},{"path":"src/test/java/barbie/TestUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.exceptions.BarbieException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * NO LONGER USABLE after Level 10 iteration.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Ui class.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUi {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if an empty file list will print the prompt to add Tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyFileList() {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" String actual;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" } catch (BarbieException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" actual \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d \"Barbie Error!!\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"applepiofmyeye":37}},{"path":"src/test/java/barbie/TestUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package barbie;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import barbie.types.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Utils class.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUtils {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"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":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Utils.getDateList(LocalDate.parse(\"2023-08-20\"), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(list.size(), 0);","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"}],"authorContributionMap":{"applepiofmyeye":27}},{"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 3f865519..e66cf8f0 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":{}}]},{"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":{}},{"hash":"49bd14d3e21dffe71cadfc99e27d5ee5e4c62da9","isMergeCommit":false,"messageTitle":"Fixed FIND command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":11}}},{"hash":"f7a5bf4a9ccd0fdcf578b2ddb9e2356c30160a6c","isMergeCommit":true,"messageTitle":"Merge pull request #10 from applepiofmyeye/branch-Level-9","messageBody":"Fixed FIND command","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"4865227b6adb3528e412d03ed7d9389814c61a7b","isMergeCommit":false,"messageTitle":"Comply to checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":15,"deletions":0},"java":{"insertions":100,"deletions":81}}}]},{"date":"2023-09-13","commitResults":[{"hash":"2b08a4953aa07acc9db3ba765343847d5116bf49","isMergeCommit":true,"messageTitle":"Merge pull request #11 from applepiofmyeye/branch-A-Checkstyle","messageBody":"Comply to checkstyle","fileTypesAndContributionMap":{}},{"hash":"8a909e095233309b0d046855a3622f21fa234287","isMergeCommit":false,"messageTitle":"Change exception handling format, add findTasks logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":4,"deletions":5}}}]},{"date":"2023-09-16","commitResults":[{"hash":"e4234a2c58ecb653da0ec130e7e417851661a7c3","isMergeCommit":false,"messageTitle":"Add greater abstraction, add GUI functionality","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":0,"deletions":19},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":829,"deletions":359}}},{"hash":"1871c3bc6e87eeea8342c40d199d5b904f756151","isMergeCommit":true,"messageTitle":"Merge pull request #13 from applepiofmyeye/branch-Level-10","messageBody":"Add greater abstraction, add GUI functionality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"applepiofmyeye":{"java":1436,"md":17,"fxml":36,"sh":1,"bat":1,"gradle":30,"txt":6}},"authorContributionVariance":{"applepiofmyeye":74940.305},"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":{}},{"hash":"49bd14d3e21dffe71cadfc99e27d5ee5e4c62da9","isMergeCommit":false,"messageTitle":"Fixed FIND command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":11}}},{"hash":"f7a5bf4a9ccd0fdcf578b2ddb9e2356c30160a6c","isMergeCommit":true,"messageTitle":"Merge pull request #10 from applepiofmyeye/branch-Level-9","messageBody":"Fixed FIND command","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"4865227b6adb3528e412d03ed7d9389814c61a7b","isMergeCommit":false,"messageTitle":"Comply to checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":15,"deletions":0},"java":{"insertions":100,"deletions":81}}}]},{"date":"2023-09-13","commitResults":[{"hash":"2b08a4953aa07acc9db3ba765343847d5116bf49","isMergeCommit":true,"messageTitle":"Merge pull request #11 from applepiofmyeye/branch-A-Checkstyle","messageBody":"Comply to checkstyle","fileTypesAndContributionMap":{}},{"hash":"8a909e095233309b0d046855a3622f21fa234287","isMergeCommit":false,"messageTitle":"Change exception handling format, add findTasks logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":4,"deletions":5}}}]},{"date":"2023-09-16","commitResults":[{"hash":"e4234a2c58ecb653da0ec130e7e417851661a7c3","isMergeCommit":false,"messageTitle":"Add greater abstraction, add GUI functionality","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":0,"deletions":19},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":829,"deletions":359}}},{"hash":"1871c3bc6e87eeea8342c40d199d5b904f756151","isMergeCommit":true,"messageTitle":"Merge pull request #13 from applepiofmyeye/branch-Level-10","messageBody":"Add greater abstraction, add GUI functionality","fileTypesAndContributionMap":{}},{"hash":"3b2c947f4d179eff0174314408f2316b74130b64","isMergeCommit":false,"messageTitle":"Add assertions for error handling","messageBody":"","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":3}}},{"hash":"65e628921c6d69a86772e4efe66f6a600a33d542","isMergeCommit":false,"messageTitle":"Add javadocs, change long methods, checkstyle","messageBody":"Some long methods were used for parsing user input for example.\n\nThis causes low readability and makes it difficult to debug when the\nproject continues to scale up.\n\nLet\u0027s split longer methods into helper functions, Javadocs can be\nadded, and style should be ensured for maximal readability.\n\nIn maximising readability using a universal style, others will be able\nto read and understand the functionality of our code.\n","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":62}}}]},{"date":"2023-09-18","commitResults":[{"hash":"1881228b75a4d7803071d9d215dd1fad52d4c3eb","isMergeCommit":true,"messageTitle":"Merge pull request #14 from applepiofmyeye/branch-A-Assertions","messageBody":"Add assertions for error handling","fileTypesAndContributionMap":{}},{"hash":"a0314a8c40c999eb46b73a71e9d70cd75264c985","isMergeCommit":true,"messageTitle":"Merge pull request #15 from applepiofmyeye/branch-A-CodeQuality","messageBody":"Add javadocs, change long methods, checkstyle","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"applepiofmyeye":{"java":1429,"md":17,"fxml":36,"sh":1,"bat":1,"gradle":30,"txt":7}},"authorContributionVariance":{"applepiofmyeye":80608.56},"authorDisplayNameMap":{"applepiofmyeye":"CS2103T-W12-2 JOEY..LEYI"}} diff --git a/archive.zip b/archive.zip index eed42561d5b58ec5f080215b52222f88d27eede4..80a9338025544871cd5437770b7bb2f51f3a447a 100644 GIT binary patch delta 495223 zcmY(IV{j%;AL1>Q>!P{p;sE-F^DZ)YQ!M zQdt`K>U=sloPsnc7#a{16co@4N%9T6BWf){FC55!oLlLNTK@o-X7FF9KGtRp=DW3Z zcNY0>_dDd_zgyP7wyOWN$%bASsLd?|!2aK^W*%zbGx7hEc^rYq|H&{uz|g|qar7Qw zAE<9g7y+)L{WjKa5TG`zKLBGQearUXATrM1(B%R03h@nXzd^19zoEPjWEJEaLIy#G z(7r)_6$Aq88`L*JLQ%hA=LTf|dkf9OpCEhRc{Epuf%2pO2g!=Mil|LGp!59S>S8+R z>%aA8D?mXtzLg~~Fou64p^(8qzCFo)*?OqW1PWl&(BJVJO)!0dZ%|4DOaHg0s{*hi z_HSeEaX3cvH9PHn;Xe{7VoZkw+4Y)MyH$=LF`?!CP zs5PNRZN|R=@BC-n_yFgY|BhqJLa_gv@n0gQ+7Q4(-?Bv}gz~?Px{4rV{$&Jr1o8ZD zGZ4=ZLdM@7DILg5N5|CL+x9SZ7S_2gBceIdU?Q`*qg zEZ^`u20H)WWMrApr~f?2kI*)R|3VlrcM{*=q7QTVFDVmSnEiiSk*|IkO;O_^jpR?gI)hug;#sn9IkIAqZ~HmU%7x;MNykM+F%dW{tXlQ ziQ3GJ4EGE1+mu2G_a^r($Ck>XHka7JVf`yyKLAcy`aAw(3{L9b`o*lMM?Iuf@c9(IpL_s9Xx%YLro5|UcC7}r)$-D&ClR_(OQ_YY2nR0#U=*^ zLE<1Pt|NRs@oIuA(1!ZMurwe9k;Q@M)ZMzsnQrcP)6cp(b?S6V%&lzP9T?T89bTBW z=~Muu*fF=h&URf}-)+*W=5BZ2xQC+Go#gInFL=5tt`UG2FK^`btMk8-D5vu^_cc}y!Um*~A+udfNwLad7} z$L_DsH}+2%QD{W}Bg0dCu_y&0~MKv`uUbT+oyL7Axi`rBf zO!l=2<4(=0>%B=@v$+S32o-rWm0-UDPeO~5p&|%?a)QvUm>Ql+cpe+3a9krcUAWb) zv*eM*!yf=^t0WGGfp!&ndV}v%i3`HPynMpkXs+0xfI_i1y;caRh@UmCqt@S=Rbns@ zg~kG7#~ZY*^p0SGc=}bs>4p>HiOGGh+fbX=!~8}e_rRE>C`+ONYg}hzUZZ03i4_AC zT$&N)z`><4%rVK-!iQG>5M0kC1#~`*WSz05P-8%$vZP{Tsm6wsWnT--s1C{n8nm85 zS^bIsBux+>vFMGSC}z+CJve5f)PhQ)=;9`3rH~Z4{20X)>A z5J&io3JItvigANvp{VT88R@yX@@t|NHO}MxfpL4$=&NfR)simMu~A>DF%u-P%`t&k z5)#1SXf|D|JOmf34Y_Dxx*@o!VxDPqMyS(J(EQE_daqB{+Q2-+hO>jndQV&T2Z#DB zuRp%GIlhO4S$=suRyY;Liuz7;MIAZ`)d9H}C>a}vLEhxk5tzIBl!?=D!Su9H0N7Bh z5?>%K&R6+B3YvYEBRMvTSO&4^2KN^$$|>NSdGwxYwFXphS0DxrPN$QwxM8YR?=VEpJ&m5fGz17?7p88xveF`*x|N2!y~NqibWChQ9C^BVfSO zZ)nyNU|2cOEjSeh!9Ph(11(%D)7Zzh+~8lF#E11`OZSF%rmtz9$4@2>>;!Bfv#TV2 zyhUlhXnVCR0#U8wWF=z3N$pgFck6SEZ#6W(I++K&ROyp&fZ8s0b%6VE1GuX|9KCET zt$+@&Dgw~#{X;Heib^cWtiyK_>^}i~m9wX1{RQmhCr16N&s??g2o}nOnTes21=H3L zeAAn(blR%DK|s$yn%czdYAM+%EQKo-A&VKVOU|G>Y%Hyk2Y6LH$r{5I@T<@Y!AX6d zdx=n3Nb~Mc=GfNlWqv>Cj6s}H4Im8;jL`wRhGu%( z^;$h)ASFt+`E)i%EG*qC>kl1QXFW>HDq`W(y=M`aWD<_Xl+V=lXiR;6F?v>#laYs< z=L|B6Sa%f;ZV}~K;}6EtQ)#&M-p8H2W=S<^cr#$-2i<&Bq*j zCb*?h&b{BBGR{#nS}+-HB6UM7$CWGlqH|S|Y~5ZzdfngJFZ{o_Fxyavw?QiC)>dV} z!ON;Z65^T)S{0JR=do)AL=VKZH#!N&E)JP<4N3@}L_TnPIt(L8!WRKY3R3r6FnNTs zz&=P)>J|lT85W7P`KZ%~1hzkra6@>Df8m@UN~vu{_Q2DgY-uhA+}1M<|DDQd!OH1` zh>D~wyal10>GAc6%KNKQ8QI6q1wB-)W-sw4Zi|S_tgqYrR#%(u$c$;@*UAqr>q)D> zP$|7&1Xu^GCFXa1#`)4r}Kh8lV6F*Z6`4bSxcmV?p$KOnuGi8Bg2(>~0ek(e?hA9Kyd_ugU zGoPWqRk?K2LEk6r*-(Lfgn?_K$w{SV!C`7txx$3Iy}N!<2^U_pN@rHt%@*loOLqL4 z)r6eib-tP8!ioZag8`pzp$3 z4k%`mW1mKZ@2J3{(gB#R@W-AcRRrkf*&mUl=*u}s2n090WFIGZd_;5i^(TmH!+BP# zNh{mel;koecx*ta{2gk*Hai}aFQwe@`$>&-OEn-nGCh?mHn=cQUR4|%Qy8JQ-_c24p_nFxL_ z;>~({fu*SD?rRh-eCigDgcy5k(? zXo5VvwpS&Uy?JHuM#}2GPMXNP=vBd~)Hw@6JIj`uQI3_9#IjrfD+{th(n?keX78g| z92m_njCEZ(Sm#!vyW_?xYW?2L3*f|&#d%G{hloxJK!hg+ho+-S-jQvhQi%`3;5tF_ zbHSlmA8seR_z=im)Mf!fHGeQiLM}y52Enw ztB~)pR7KFs^vJiM9?9J^^5{-qjUryQMg9umy`?0fvkXKwwip_?pC0jm3{|jSFiV2G zCvtWcMIG7L#W?heU#WnXX;YXMu1an}V@zfM{}+uJDZdWzvvfIBsjfE~e`Onp^T=p- zivNr0Ws8uFeW0amT~?3YH{a=yWiPlz@hm`5O*jZ-=}tL8l3P)=flm737ggVExLHX#+*M+d@i2<$fTMnVks??vMf?K##R0@lV*71}&1usIywiotLVQ{R2m z*CUK%XM_a+cx-Y+)B9scwy(zr;7>Hrd4bod!Vz)@jW7w6Y92JW?U3-ig8p3)n0o~E zemOjKBmyqprb+N<{`{8UtS0Z8g47TH-fh6wA#t%hHb}_9t{uI`>|Qh&yGFN;tFMMy zE*evoHjHe*;lj8wLm?VfAVgdfehW*nc*(hY{AVHH>Th*7ZZe;qmzGgNS|l2kSpFz? zYDXT-XA+XL32=3OT%F=03zZs+zU{GNeIK2JEv`hPj%;;N#8nJFL$#Vjv~%m`rv20> z?w_^aKO>|<^H<4L1806hPh_^L56&GPOoLRw~NqkiBIi$9y1W^6nEYaPblHC zV9}KTv@nRV9>IBX<{OC}kLj(7Y;Wa5 zuL*FErB}7p)8KgHfpCe8P@SA>+hU*qd)gOAQa8VQi^4G!X;x=o^ZSop-hos3YRVp2 zfRpG{H?y>YOD^jaPh6^=NoGFIIV|beOGLDfUOb>79+M|-7$Rm7e_mev_uT^i&@W2} zC@05H+|-%dbc(fLUoT1TQ9>cmU0wO$Zu4q)H-dgz&L!n2rC*RFg;nic(sfcDs*q3w zYgIy{<0#l_f!+5XpleN5soc^g!~X+S(wP)Vr3=GZ`3It~}-=wB5UrJ8?d! z*a`iu4>`Hh10D~6@9=Q|pTGuT>w=jT+=#{mOkB(Yv^-}qP%W%PjjnZzhrbHe#!8n%1n)&KA+3kga#*65^nndqDg;gtE?~HQUpb`(XPF8 zojFw9`%WYO;7X_#S=}$lcqrvKNmQ#N<3MYr6qaa$0vn2-Bz1WR?%r0@qaAx$WgQNl zXHn=X2{rYT$4`sN48tf`{81hszp5ZIUY`H+>*IK1Ng)(L{GAdq(#TRkc@pogdb80hBA^`}Sc^0YPEM`g6d*;^|fP>m?3Hu6=df?oxzN?B8G8Yxht z5GhzEt`DP{s$s+~@}jaOl?`{gpfGy_wZ%rVHY}fKJjPKv2M$KVJd#u}Ijy@%L(<#w zqz95YfjIV&J&jXUPJd$`MgFr2I4O3U;@8fD_d)K3m2-(u^WG;u(zI9nq_d zWbj{Mhe32AQsT@S$>-}(T6yZap<2;JcP-Zk_v4&Cran_=q~DWTPW71J9<+A=^Ip7w@~`#tODK zykFiZ03Rr%HubC%fraUDEmC7?RR7<^D%3#vN^0_CKoevJ3R7ea&%+bvD+hOzVR}Tk z^9^Ocrq{30i?On32$Pz?`|VkN#N_2jiK$#yn*Z8X))G?|fBN)2C%)G-Y$UK80@(gm z8~c?r3>#b71jM^(AHho;6CjF-0xlRZ6|Nw02w?flX!aHe6o)v>6ha@L+cNPB~|8wPKe3)GqVf&Iz8%c=tS1!q|dOX=G%1}0v>CF;*B-?WivpP?g z9NWCf%!};nD|@h^T>r2q zGlmDOjBSy}flo})8Vg|Wxh1N(bl2B@BqKvK5eBIMC8iF4mxQ+>DS%NM_JFU1RG<5GkJX7 z1l6W;bam5BnRXY=`jhk%irx1b4LkLQtbLWu4G?(;@FR$%^fzYG<|Q5mj%=YKS@wd3 z>aSyhd1b3bNHY|KakN=>$X@s!GXS&HqCo&_Y3pH-TXaM+*8@a$!8M1k|qUz|I8Fs({Ts&N_Smqx0 z3g+X5Dud}*8BV|H3QQX5gaF%6P`^rJmc&kGJiGY|ItkwOw<_6Ljs#l$B`YxE)i6nygu&xTrO4V&i9n+#t=enE+7-UMO8jiYz7Wk6{?B*kP2+msh< zWCJ~s;vi)JEV$&FXx&ea172QNjzh^H4yvxmz^w?o70V|E_toWJ9SP!RFl+*Qv*eY5 z7=o?1%B;Vqi6Fs)!{5jEBu@+Q&@3k8GkJqCpzwnr=%nABxxZxWUUpo#Yna)2+$rzOsCl^Lh5-t9i8B^)r=mZy|r7?4E&& z+9Bs<3AU52AM^E)X{}Mmf%<56TxCO(n=4*eT1l6&|LNw^vvOcLQp7jpi|QhJD#PIB^}@rTTXH%HJE#?WUNWo#fMA ztC&LG zJY9y&Fs6!jP%Gb7OsblW^IFc%+Oe$_`wsd{|8)V@j^XgcQfpK18lleOFS92H*YM=6 zs#t!o@^5M=M^?DCv@59a2-nZ$xT%tF0?}%kblW(;lx704Niw^#E5N^2OC|++DasMkSwNs z!jQ60r@g)%-QWI+R5Iy&cUQu(43B15373jRce+NZ-iMG_`HC;+$TSifv+$!J9gI-WY+|J#wtVgVId9S&l6NbT-U?R3Wp5#Z*i`nB$eb!`^IIRJ9O7BjU zo#iz{&Ik2q^ZErt*0&#&a_$l#<<81B8`Y-Y~h_#Q|kE_dw-6zf~ zh^-!LNO(<%K2=VvWM7lLu;PZcLA(crvFS*ft&{6pcY2`wsAp)Z2z z?AMCVKaw{Np;g;uqx^4Uu3iL-Asbh3&76`!p-^MO3G1eFhWkzZ0*EgsT-=Bad#iMjA*so&kh*= zD5n0Eog)Uf;iE9h zR#mqyHG!=5KN4);Vk?=YPoh(3kBP|yWT!zZfoLOZSVf8ACxiUW;jGHA`4=XHHf6%{ zh4op1Yd3v$^oJh$-?V-G-J>y3h7&XPW z!wz{>cJ9Cm7jlkn3roCD-Zd(>9h9uNfyKFX9#HCuwpJh-vD>K4kl>US zf~ou6IT3%Y$bzUHO&xV5=49KMO@DE;zI`yZqFJ0S9=SLyUHV5gK>Ci%Ux3EFVSWZO zI|EjbQZ=y@KMRR^{2^+#4;t%jc$Zk~XLu0pb}`A-PhW;W@SJ81IM~Sk_74wDGyyL)WabeoEZ-Xxk$m zzqhQ_nQ0~7Hq16r;Gv^7*YmUvunpt3oG2=bhk^PMQr&>+aeDWB)i1S$b>TL0HS}i6 zA6(cgHp|)theXxsSE>P&t4iVI{e}XU;FRRc!_A@9rpYO$?a2xox)NVcR&Iki`q)i} zB%3QR+!0d&Xxuoh)0Mp- z8Gn7wQ(QrQad=861FY-5jVOCvx05|ZD~R!>_2fr&*pxiM+P!&LY~pR&AoZfZAp?Q` zIuWZPqXm4$BJ!Vhx9pA%7YAn#|AHg(wmSca(7SiS{EFp2yg#|nk?sBC1%2V( zsrtY;6poW(D#QY$ApL~Y7<@LQ`DB6Q93){mPCSlieEsFh?xHM?cEzN?r}W&o?Ir}w zI=}PGd4cb0>$CnR^j$>M5zf`4+oRqUE>d0be@JO&J^G+`txMM z*_(PU>S!$;XNRR*Vjd9vwZaj78<6|@sT$`U+84pN^4!t-Q({+VsMYgLyVfgHj@eT! z<)Av=&>3TNM=u36>P`EJV13Qg)$YviHJ>Z$jUM~ybV~1ay3$KK`f>x%a6JtPHzZ%A zt&Ldl%qcl%g-l_TQJ@r9Jj#N(G|GbRk>WGnWf*<7Lp}5m`V&yq?)Kon-bs@u6Szw} zUKfjIR+```VT5MV`Xj`_onG02D@v@jCHxllW{tmZjPbeCE%qq>+@l-d;)3p-(+n}% z!m#&=_o%|7H>kq1b1vJ+X`wo0oFcD0x>X>r{?p$qV-StIKQ|`%l%4NsP1{;Z7z+WO zye7;+pdU&4;054}Ru-QGhx$7QRWJ#~8?T7qZO*;olUY1nJ|=+PZ7>UWR41tvzM^BHSVb2D`sc0YUJn4~tLac+)RoXxT+$jM>91s* zs7IXMU6> zyg}iyLv{fE)52vt)Si>10*AtE<~X^ei~(`5A~oc)nhsUP`cV%|2RbLv&mZCDvu1Pd z+ks(T7f*mCrC#4ch3ns-;D{hj+!oI11*4FSh0kc5Ej<9PyB6WM6X2r}$d5Y}$)sB; zW6T}K)>rYATj-`4ikykY+5V5;PAvowyBjQv+G8cA1TkS+rIgn(BrrMYXGBLG@k!K| zrKz({Z0FH=a~1rAf;0j}S47H;+o&2RJAe_+cPYTUFU`aO6wN52y5|%B{`$w$fZeX! z&Bq%knS3#^l3no*VRT$e>iHFTs_sJr3s>fBb|(Ubh>Mu))u$KE6aj#ouhLKUs;vh| zXJbgMYq+L<0(jM!g*SRv<~;=7%7)fjs538@P<#1Wy9A|6|ds zGbSKf)0a1HB4G_@b5%iZ_Kq-hz4uHIjF^^dIJ{7ryk#JLie4N?gIg{`vAl84*c+F=$~f@M2` z2@eoO7hU*1(-`7Vd@OGH6N`1&9ZRZQmb%6T={CEnd*QD}cHZC63J{gm&H z9!FR>!%Bdv_myHzB?2ZCx2^DI91)cvbM(+HBfhR1esrJm;E+`C07L_hnv_1Mq$7YY zu9pz&?=}xjRnF^n+0_*MAs@VH`-H(Izm-Mqxi5sezmIMC?z*xC3DK>j_H?@GEy2}- zoEJBY6WLM}@U~MrO8exWwZNABl1{0~DalC)^0G>2QHDJl6bdPh2_{aSm1PxvGlKll zg69KT6_B#m)Tv=9?{wR_owykj%u&F?XR%+#bnB!@mRzzIR}zZ#FLBD^dcsE~n-0d} zlk`7gBm0eviF%hV5Bn?m6U$Aky{sEW=prJ3o0+A%y%!F1bc9feN3zFY$js^pMj(5Nm z*Umc4#zz&k_=nKZMQ3qsMLfkiEI*Akn`aJ0u;_-bPvMV%-sj6}K z>7jadF1hT&3O7(*ZaVW}808m;-%TN#$51PV6|P&1e{a7S(o)i6d^r))A9IvRU2rJ5 zuLPSfYR~YUad3}Rm#IJ?ZLI+LzmS1oTN{xAV4)1#k%O? z_sml?{cJUo3KLp#VkkzBi^DyR1PxJ?(&S)4Q_`XT5E#8^(Rsa-{2}rGa;}2hJx8sP zi{|Kp&?=Tb!sdl;@~7CQ=G}ECxev;MD<;vDvhJRU95&1LS9U2!({ch_fO?9hMKT?Q zm}L)<96=sgaI}U(JXZT2A^st$1k$!Itcn)LW&9gw!4)IU)IAEY%0TkQ;5d5nd_O=pE zp2MDAQrUSUvnwq-en?(G6{0x@Yg_7gf?mZZcQ?I(tKCk#!B_Hz`qk6pi;jbRp#?NS zlWS(&#sPlVh3b}tM;p|2)Ld7$mF`or;YPaU)=5@9BQzvIzY`Tp>(_7=|0MJ_O><<3 z_?~2(Qsjuqj}l1&aBd51Jy4Qe+z9Zz>I95IicwB1SW;#i78qAR{EP(TJ+Sa$hM&oO z)J3@b+OLk8-F{B>3cQq`qi}II8YkwdX=)#!0G*7nN3q#Ai?jmo*NVUpY|wbd31jSz z!Y_o~da#@c;GDvSSV5=l5-|>C3h`cpYbC++*cU89L?E@ycVIc39y(#|BPp=qQ+>Ej zZ&PWGtjigg9d|AOr0=WS)h%>Q!F#)rz9jsTQJjbaeH?SVyt#k#WS<}0^S!3f*G3Ve zSqM;1Z|dm13bd_}fS5ctTNmM|R1l${W1Lv>Y3VL)cz-PApOhN2s)qKzG>V)b#su(p zHS%9z1S4Oa4vT?uec3N&*@-2FKX&E}w0~ZPU(E+Y z54+YVuW}uVvs!j0{*JAa#R-p4Ihl7y5)COP--!_5dE* z1g<=vPrrN9B%RBMQFc(NP;w@(JNX^yf|lV#SD+~e_${mEDBWx78%wS()l`05H4v9p zt#V2XR~z#xn+YN_2W3Q0Ljy6WqxLEd?nKvtkZ+B07!ZNSifW4G32W}1w2oXQx%Z2S zCb6i;Sh{|lPc5|mhb~-?Z@GGCZaVrUFf0zcb+DeP6yQzQJl?F=%mLzpUYt};?XO%f zysW<|z|i2i4qV0Yr4(uA#k;1q?Urds&MM;UglcyfrB>(m4i~L@+Zye#x?fV>$w7R* zUisH~fS_a17Gm8fWgb*XJgQQ~CD1tWWj(kl}7Ef$iL8)?9Mfb1yhxt zk*y*<0u1uv{iPkB*V54$T`)#Js=C}HmENv&h6cV#$fkdea@w?QBcjHEpa0=tiR%qb zW!Etvb7ktCRoenCU4PGEEKYmOW_S>J7P@<=?X^=&fK9WTeD6w_sZ=4_pu@v`VW}~jKU~gX(?9q7EoeM!}2*V`|%OkOr ze?UJIT^QoB`7?N-EyMx!?MW4jCo)tGprpW5>Cr?Wefn~uD6_65B_qNT+6U+G2JzvJ z8w&xMKE^!qK<7O}Y+C1;8fwp*1K&lkmPOGQ4=L*D(Cm}kRM+vn*8!+laMQ!{s#k3| z{kZD+^Y}Wd=DD;}+=40g?NBFo%Oj0>$n^$<&?r+`2+NTSL*9(q_v2cGNR_~A``%nf0x(vPVQ*a2H|1Ev*AFd*J@px7&f z1x@MvohVVa%;(Q&gYgytiNt10H~F4*^u@bycfZ=7IOgZ(}LQI8NP|>CF>H@S0#dyXAOg@ zLf>mh6Nx5u!@IDz{o)X6jA?$j$djS*&!VGKFSzEX>Oi=f#m#dP`OqO;6>)ZcH#6?# zN)ifNmXVLxkbf9|SZr;1ZME{BB}7BlT(-XKo`DhhCkI>Pfi{g%01p)ccs66kCabi^ z4r&l;`wtJcOCt}fdb+mJuSV+#QG*PW!~PwGz@Q$r^F^g`cEeh9RN~6Z?6Jrecc;YQ zf!!x^&C%Ly0SDXI)J>tZ@k66|?mY70b z?gHApdagC>gYIRIfVjwd3n?G3gk8C#4s%E`-TjeZ%%US@>T+sNMM6+r`USDzyA??1 zHUCU*A#tDha@tAZvOjuZ)BK&Ev?%%GI=UhO5mJahHt=XjMLDontE)G;Bm}9M$=0<* z;mnZN*mh0Bs_$}3+F{eO;3|$UyU8m0SmOUv-?V=Q~k2JS&XEn zEAOD1M3c$7J)yXko+Q9$gKoz_YS#3jO{_{B^JG;;+G9VSFWeNx>b(BKY~#Q#NZX9- z`66o`{I04J$lXjg9=2WB%p4k)_He1#zIcyqk9Y>tNOsiChC=Rv} zrDZ!|Pb$x8`S49xveeJeQ&s}56P+QAEY!a5A>5PkX3Tl%Sg-b(psi6yoMYH@K;pCpXvrhCD%k67<)v2`#yPBvNt0az2aaMg!nW}NDW!)U`6ZLPQi zy)ke{S8;41Y*L#zrn7QE(ny#>y7pBn6zsFdYKknR4O-kJhL=Rp@%Z2W{_p&DXO78GiBdN{h5kh-sXc%pIvHIj+IhVp?I%Dl41PRqelnj*jpX#M=VjAnLP7Y}BJUpvE2fe))aL&fKp35@U zJ)dkly;|JtE(I8FE>6T8^gDl5JF6=FxG?*u^&yehdU;vg-PVR{>U_9syt_*^A!C^8 zD-&aHBG#`=w(H$7$DEJcTfB2SdwB!N;)g$Kw(Zt#)?c^~2YOxL{EW1&-F~R=_~d-| zr2{OI%TFf?+Dsk)HJ5ui1L1^yIqP$LtQ=M}{^Nu+=!oEJg^?kMN-Ps8jpMvh0Tdct+>Fdvz zGZ+PQjqX{WLmj`p3YN%*lgv0h&pB6hLp>n6)9Y$1spitrqH_KNB(a|MN$f(zc>@c| z$aNXZqpr-yZ=_0gsqsP*EGZ+&t{e(+2R5 zG-RO8+{aYCJcgX$)O#(}d+_!~)0E91uc^!)Vzly4`&O%F1g#L1^d*uD4O{)Z2#F47mHC1#t_|e zY!t2VtT*e9P>H!Wb0M0HDSb8)!=&^yN)*H72^Ny|p-6{C!@nuCp?_D3N|^uz;kouU zx7PHLzOU%uH#E0)w0ufQueLIn0Zy>~eAHlgMQ}^o!9QZS{avD_NN{o@;dRtZwwbsm z;ujUeODh=l!2a_hE8}5`>HDQLd7)WvJ&wRKRkpM5Z(>j?al}miuEDZCPP9aAK4Z_^ z)2aJ1fvqWq`rkV?y8#XFlx#SloUTG^Y7a-td$d^LGCWp(p%rETaa6?3X{2DDNz=WG z-mS3z21_sjOkmnbTj}{I&;;XV3HQ$T4ZBajIHA$9I*G*bd9nP!O^8=YQw|hP`L8EM zrA>TY)}#sToW05;rFw~|PZlLPRTvG#S>Ip*bADgjSE-JD*TqPF%;E~5+vKYLnq_Rx zK1SQ3GN9iA@5Rd-`RsBx?N7g<=AzQ*S}X3pBjscs2d)o>CK_Tv++Vq?6X@8~5&F0j zbBP_jof8Rt=N$vW1s&1ftr=GjLhCU)0fXzbq2O4lc2On~j?=C{v!@txH_01_-cQ&y z1T7$&@4ohw5Km5F{T zrhM=P%6}|2lnFyL2J|-~#70wQMsNvj+A22&daMaAoZ*V&Uk~xaDcMX-|0XT$Y^#n) zq_@$wrrfRb4a$%$E9#vM7do<~|&Nw-1nlE4B> zuq0hBera#@=I9r?X%wP)LxLZlS(CC=!!*|403+}rAT@Ek+H~4Qw~7(*c4?1Ihr?ra zz{nZ7r5#B9_-Qr^5Lh)}lx3ciY-!M4CVSVh-i)kHsF_3rtkXJdSGBrA7S;Ub;ZY`- zhv2hnmcfIM1anIyzj-<4Vg#%<1KN$GQ3*;oW(6jS)r7D5$``xV44ScBBI@$P4(oo( zmBQ7N1{3?oa$xQ8*Ndp@6d=TpXpj>CO1gcrBVNI7n{&PZE`EHKf@-lQ^<}%(aU^o6 zJ(mLk?tBdnjGO*pk;T6hSHgk(?GrmPJ3IORAU+}3!5N?FNH*j&e9e8P|Kg*fXG1OR z{K)K7hqQZqnO`P+-&GHU!F1Kf?@*L(bh;-Ih$s)gxaeNx-xM!(NUT$b6dz7oL>7oF zm+Rd0cp~8fFjlEO%=Law0dVoIaLa-5&o_Cv%$6*gY~DZ8>G$^hhu_%wyExxpCc>p% zd>w>asw)t4MG~ZTBuVIeoATP}X*Jaij$s7KIA2*KyvheHq9)XosUUdOjBwJqj2>(K zgu*vP5OkS4gN>0$Zy;F?{`)gKb&pCX8$-4QQKh~HD5##u$MQi$7E>VNU*Lc5`pKIlTr|XfGIX#_QUWeRcJwi#%|1CU}enN$+P&8xMOL7 z@q-~w#&B4h)Lckd%xQ^Qn7-hYHL;jhoHve>&9nif5YI^z2_kqMxQfyb65C$9BW-lI z$DO+eu*f09PrMfdBdRu}9X@7tie?tV9km1O238dwTvJpR>pEhl$P);$j@%^G=`n~- zcobZIP%RT?pxK|38BU;rSI2bBIZ@xMcw_|BTb0WLTbz%pvG=D0oF-2pQ@jf}L$?o^ zuvd@-!1gGr<5zuYA{gGXnG5;zJknF9M2h2DsiP=^`J^4=_|^He-f>)>0C8t&TJ)Bh`fA%b?o#SCyDu4Wx>2!II3X zLn?*`m5E(rlX}-3jrzpKr!-xjsWAl9SV7s6AjHMZ@{~GIqka1{f~-!7A}I@F*>v$G zIIGnPFsp$TgUIrPLumWt%mL@-Faz2lr%!XMg#A% z`CJwm{JcVSAIn7y~c&j%?@tHqqY7aP_?@9l@tjqX9^TnpoY0d{X?8rqb(9s zQ&jZrE48FwQXdaDh0)@Hfy6`wcStf{WZStXQE)b=oSMa~D5-2Uxo*`n^ggu5{hT|L zU9cRZLBDr#;+V`CIcZ~*LxAe*+pJJ&U(^fFI125mRP1A@F*5rnmJ3zOMdA1rP zXOhIY9qa-k<_3kb-LIs%VX6FM)+XDz@<_$%Dp{!WrS1iL_W4JhsHH2Qqr_m}Dch6i~Ho;fB6gjHdZ+Tq`Kafdeifd4ew3q(47tO=DZ>cZLTeI zO4x=s0urN;v*K3DUg*M(!5@CNtq;gblZ_?A*PH6I%XV~^uf9A0y$SE+5s3)9D#-_G zSgX_UC#+PfQ^q<>>jnz)XPOYbP2L|1DB|$}#;^k|uq~GYo@Y66#v5&WK9KDQ=dNq- zKyCiLvO8oXtC#RwyWlto~Am5^b8QQLNJc@oiW$N zqNUNHbaTS)(gHNVw6zK|OgN5br)(3ZdTEyb?BFbLF*hOdo5I?;s>r#QJi4~#fNwD= z)c~ozjys?ii;yt=^nA(dJQyeN$laZ$J9<)JTa8C8*@yO<+)q4Nw4P+TWp%sHm3g=s`Bt8Et;j68 z@J;~mT5Hw*BC=02U3FpFQ@(#d-s>mcbzO@RkeNP@$-3P71)Ztv4p zmium2R{klRqFchMVe>vJ^-IPQ+ul$HiZ*M`bvxPaNwsGA<+{3}c3-=(x9}p4Exx6H zF3%Cm#zXl$G-DTQ`{{inKV4UBImm&-#h*!ZfswP%~X`$z{JX+S@@FH*4950bCU00ZDqqD+3SZaeN|32V9 z|H8Pc<`EBEKOR)i^|9*8G;STPm22-60+LbLumGmLV%=cNZ4g#15XX>jyIciGmx7Hr zWgPDhw(1*1kAfEdsZZN!GM3zb`1gT zxWPjJw@WJWz02?DGJ8%BR7`^=6C(?dP$a+}7T_-J8zk7$oG~zQLpB7>iKRB3?L(p6 z%zzx8cr*tGHz7nOUJcdScv1u4TLOxoVGw6B60|q#{I+Nmrb7;MmsgX(pFgkh5oc>b zNw%o>R)EhE_%$jq=^)TIV)E*Dxu_LxghGy7jy>b}#KzP3{CL6%WhaH>?HGm4_zoy|R>yZWp=oSyTf9S-= zhKDO{bNG-e$sySA2oU88Y*;X{*^26Igb_D0e4ygfKm;jBkc>n?)A!3pX0)T8+F8c6K{UZ*r@Sn~VX&O(xiwIvy6uYS;kE;mP)}LG#XT6Z* za&$hTrQN@~ zc5;eAstfg^X`s$Eddvr^2B2^e0XwcXYgr0I4$Txm5b_v_v#5k9xNM+R)dLVH9SKTQFxR$TN9)zc9a^tifuf=qcb6$1`?ZI;s}vyiFuPd`^@5CHe8PO7f8q-hPq;v2 zF`{a-QD{*4wHXmyY;RQUj zcnBH-;(BIOv4O7CBgDA?-Em4g!{MF`hxAYjX#8*`&JDSgi~URW1(*fSrMQ%Z<7Ak? z9I(QG+$_AfZo3AKHe(!If4VVb4H!BHp;izs$BNu>)8CULnafH|AAk!uZLZ|vrESlS z^UytTalTh2zyt^K+)T{15(0SWj*Rt+r~nJyVR50-6u?DyWOU{R0TJUcK(f+GT_FS< zY~(+kgMNqx$_x9sYrM>vNhpot$uy@T0*SVB8P&{$*#_cB$|cc#e`AU!b;jeaI9TXz z;iV$deC3!I8HAKc;$YiikZ41))0(1wyrhlX6}uN<8V+)q_Od&s#Hrd~au$nhO@oK=Zc#*Co>$Ir4U51+L&r}_yYj)iEVFY z*uKXP$pIFIA9~#)quW+2(7qE}s(-G2p(*a4PU9F_4WyRfe0KNZeOFvKl;e#$LD_LT zRVVC3O_stGf|R)}&*x(ur2^S8K6U%47}_Jg`s%6tKq2+Yf36~3|EN}Ft!C^+tiAjo zA@v$i)rg(Fy+4i*_YR-)hmWQuSNu+Ovxujnvi!)Q>SXNywEyN9m<_~DW`U#;b!j`@oE#$;aG9ez&bg|67pDE!7 zToqID)4~4Fe;gg}9IK;quzT~lahIU;0IlvyO@4|ZfAK@K)XTOyYPxbARSrDh>Rj70 zPdj7p5EPwnQs%xyHw znoUMgPOGY3+25dirl*J;MwfdvNZSTy7x@)$f2*8o^F$G$Rxcg_aEpj;{l3|M`qn9v zZO)=JYiLB{VgRanSZyY;4U8HQ(ahc1vvdb$`vfBypXV0{4n9Q-?rRjvXixk^h2l;4 zeowRWTl9M~9Jwkgqna{yzays&s$$3| zf3wnD=w}GP&E@|WXV<(Pd`O~Lp{_XD*sM=EFvrh)Ihfr~N8qY;t%EAWJF5c$)A2Px z-7^&G?6&zRuV-Ng4N(Vf22gxkb}e8!8otWzViQJys zTX0_{fR@MZovz2Dh*(rOQrb#S9kNa56*?FoUDLL=pvFo7ot2vJwzm-Asu*9L<%|Lf zq_G{v%pTtQ{my2kpb?(1y1ljf@;KXDE3MkU&2KtvqYaCKCW~lg?|zzW2(F+Wf5Ubg z5YZsZX`O$L@{3+2{_##7XZ1G?0Qc^QZ(8Z3OZfHLl6VOX4yyUfT~u_Nk{7c)NyBs5 zf2ppxBlGk6QW!1q|Nb0C8@sEM`$nO<7G9X+Ws)@QFMMO+*H)BVk1tAs7t^yd@+rKN z;jkeEwR1u8C8U2&qZ}a(B=Qubf9Z&2Ow zWBWcs5QCLTcmw4Z(`W=?G%ML~2?JH&IHrgPfDKO5M&ZRl0k`_cZ6m{<4P5LHi>}0|Pb_cqSC*nk8rw2Owm<+=_r1SnZ%r5{Q zR%#hzX8{d>%l;S4lXeBGg(aRuXchtioqgl)!AOO)-?}jvXs)(HZ9-La1bT2Xi7f+RZDpPS4Uekqip)TT)G`M$gC?w5{PM|SWKW=U|@2+pm z?jX|_Zxi}Gf6^t|KTOq*8R~RfEhVJ#o{z|} z_0>|((`(VI`$5HNS`ALDf7mm5?1ek6SCc@ROMv*ufA=e1y5ck;VYS;9u~%Af&D_pr zxiOHo`Y*Nya8NpxQ!#Z^fXqzP2Ed*g@gYlMou6JzIGIg!aMM53C%w~jvs{vNz#EIRbIWu+OqN(*O0VmUlhqZzevUKr=wAGk)FkSn4jEOc~y&|KvVBxXhngX zE>iyDe>h!FN5eR&8fC9JFF^gF!uRL1Qwt?rc1iA$R4sF0jf*|a50Y((!YaM2uAEnH z3C#x~uF_QLeJE28N`WjdFOre-Cf|^oZWn`UQO1i#4Q+-lc2r$1Ld|$GOiniVE#)mNLuH(x1_e{)MPv~E~v8PEb1OP8T=3gb(G;%L{U z=mL#)DJ1!&p>^m2iq3V=E^>Skx_Y9}Md*TuZOXKCPm*-bKABInTy!uR$@6eT!h!*GYX+3I|8X)0p04*%>|`k7B3(lstZsmA%0|~2bzaXfo@MI^|Hc+ ze^DiL5)v`8u3SoR%27bH;(9sWHRVcvR%oc@5@)QifJ7BI8PXWW_N-+C%EN@JV-#~x ziQWZAjw0gGb(YIEijLCUexOgxuLUGjcDnCVeZwpGB zLQoJ%omy!|IhNJfSu5|H^N3F7N^?p0e<_TJKa7{asMqVRI0`Ri)gfjMplxAM#*6V? zT|l}cGGe3>_^h;gHaBcF=uFKAz{ff&f%CH&an}PsP0{)ubQfQm#Gcc3nxobtejXyd zYHkRVF(Xc|Ty6;SVd;jjzjk*+@Nyfg7m>Dr=ZUs|>uK9mtOLgHZC3J$f2m=cf0cv6 z5F2Qh)x-w%UN@m(o0YZVRcc@*u5^$ZSjj3Vjnx*aU?rpgk4NJaHT2C3`N)A`rJWRe zfyfzWdj;Jz4>b@2wkEG5Rt0&Hp~IdFl2Xnk)n`&4nz;|gABRzzK|&|5x79o&W*5AX zSE#19%}PtT5wx*#nA_||ST~~ffBQH*9qCe}Hax@xS?v;f7twp^6f-+*^V@0pLT!G_ zEDTZEU9%7xtJNpjJ+KN`C1*;-tI`7QyW1WC;I3`I1Fe`4e zyJ0oe-Eh(1fE@66E`}9LUN~;%+&C*;dIavulnhZgzVt8l0^XY?t(ig>f3>YKoWeT; zfjf%da4^|EgkuRWsF|(3o1);_hJH3(5pF)A#24U1K|Qc)olB}N%Q}i|)^-^*3%+al zxM=uGR(3v~3yTG&XeVUVAGu02fx2JK(1h&Y?U97O4MGXj3v0$_p0wvOPf#8aWG1+q zo5c#$iU0lII`3U!5Ne;re}h39O<&2+olwxbxay_@<XOwL5E(nvu?rdZ8suPB@(%ELR1Ve`Ks|iA z8TiNH1TrE*NjPOE6e@BX=1F?3(6vmq_)ig9y(wncPd^(G;WJXI3<2C-Tdu1*Yrp+& z=WB2w2Oq0kQ&HsXe~!3kKS!n#g;pKYU#VFCTo_&u9=f0@LHsvrBh~Iq#R_&w^4one z!JW?%oLe*hvbD3#EuwCj9i_3*RUOH!7NjZ0lznNZQ=FWfZ2V6~|0?-ToohN3G`+w; zx<;TQ*bgV)fcVUAJJyQUlA?r=2Og<@h~RArRzWzR-QTO>e=gz{Vdd2Tk4K=;k*-5v z)G=9S8_JsLnk};prOSB8(b$G_WfnFWA#ZVO{>PfbKO-vu=gWY30ozcbOxLW8Z8$xq zY37aja8no)9kv9h*B)L11n1z^x!Z6`O!N4b5L{C<5G%)pA9==3W&wu4N;>h_JK)(? z+ui{Ow~Yhzf5XxG+Z{?Xe{CHCx>s=ZC0TW@{*Oecvt*^a;z0eJo`nM)Hx!OWN?%iy zC|ozrwIG*K=(gSL^qo`PZMvzKvx6}fP9dS&9FVe+)KNM54uwqFVca*=jscp-_`?&| zq;e&qRbOGrB^^1^#^<6(Xmf`1bf3s}+yL=c87*^V&#`$pM2AV5R zuR||G)4c6SrcpSG{w;@Z!f~VYuxL~9sP#K~(WAGmmm1<8`-MAFh*x~=^74l6&cg3Z zhB%dND{Qv9(i~aZb<)(uEbvWNf75SFrE!AwqCf^^;Y9m2plBlR3PUbu4)D|pkCziA zKdFz0f0-%2(r`;Vz=?g6eOEuKGYb}b@3E7EoR!Y4aqalmxBIh>xHCf&paF9g{KXkD z0has;L4#J!Oe}_k@^O@v3&h`ST#IF6m1@`e@e?A&uE`8257kwaUl^<*Y$<_;z@?$+ zr>h4A+i=MrG&^%>mW`^1Nv{H1hgA#)hRe25f6nS*S0}p43cv;1X4zEtx@-R$eP9iQ zm!Y;6ylCb(9p|^%K)-l`q3oe-I-v|y#YU42)^Vz#d?8c5x>)a`bagx2a`C{mS~e&{ zE)xC(G1t?%sMRvT+NF=MJJXt7Tez_j+w`|_ce-eI2vVQ-P5-v{yZE0>^iHpztN-ti ze*YF=Swx=~3z7ChYRqt=r z`&;$?R=sal?@cC53*BBjt3{ZJD>)kJ|1V@*`NVW0uPOSg*6wxu|K~eeBhVUm&B~A` zpYH$$23~_Tz`(#kr<#GmELB(Q0#`uxe`sCs(nrl{U9gc9fN8;(f=^p<#mfCnOev+wVJ7SpS?j^ptlbTK}lQfI7_(^xP6!l043L7{SVjESJXDAtG4djw1PxJI!!C= zgUIe#TYa5u{I+ilIdm?_l%wXMu;}nv=~6;`!F#}ise9B5#UJ=gpq9QRMJs@5fAEJ;u3gQQ zDWRwtpq%*&N-P@`4c?PfS4Nh(IlXj@_$Cb?cxNqUJeMi!7_(sUjdg(0hF$T}03i*j zYO_J~P^@MzX%c#3i?S=tDD0x`wQ{AKgs;Mteqw15k%VtIyDN^=xh?`~)m8CXT!y15 z(42v9K?BAIL;w~MXliU`e`p1m3F?eMXWd8~ zW#AVieXy-vBvz_tvF&DaYgn&=v_za~u5sdE3=ZjYmjCJ~Ua^g8z&iW#PP(7& z-8<>B2moTuJ8k|o;THz=lw4zB-ki{z)k-%bzTJ^78i+g68oTS`e`|4(xjFD2VC*6S z1{fE(elGI^J7;ms_M#ry7wFh7ZE_hsh;&=?UpFIQ1K4| zzuGE)tn8Ahi$}e7|G+1nRaX@~@%-wl=ETn~|MPjd06F?l(NsI>9dCPfSya9b$0~Em zf4XOTjZ^&RR~Nl2e|D!?o{U9i^!v21G;1q;<>DtJ0ANk#R}bZnnqM_^h6SyL&F9Fo zImb<8eGv?-+MyNv@e#qmE-YFBorUC(|H&w*fRaM0`sUxo$;K}y8{)b8Uz8s97f34H zm*F_rO-3V0UW&%u<0V66f&M|9AL*a?p+Xu|!ZT_(EtMK@Ey4jwd26ZU0Jy3_g`?OMz4_CHR5gZrziQQ?SRL!> zz{_7EwpJ5=s~b?)=?5*!=DFGMYJTmWwZVV7XDsvPe_-Aj4l{E;Dcy@o0qU;dx@Ye? zJj|B3$ zc@Xgugfqsb6q5AYec0EK`r3a%?1*} zM~%{SBuFK22$};l4YuDG2WRCmGvF{x=%`;Pc;NGaX1*G)A~5T#XmjlFJR-f2YCUc9 ze{>4DJdyf+?v|aU<12`ht6p=@R|hjl^l@8Z!A)`X5yvbi`08EONOT&%spVbqJ|4Fb z7wFD!D>6{$Uj8-3Z*~bx5D>i6?tYHq4mUKvu_X}T#%@(vy`iVEpF0|AGwJ`1h8j=S zVEil`WeAQ#EhybMt{Y?n93a|eC-7!>f2ibZdOo{PI-b6cz(Rgk$-ClZL^T3y2H&fT zB(tfK<1imwNE3KmbKZTF*H=k81U%mSCX_(pKAt9O2Uh;CO>Xh9Imp`0NQVIEaAfKS zWTxJxUW#h<0DKAfttbI?j@@~(h=z7K|7i)T39feRh`$i(I%$_=W-;TF?NVpSe+DA; zn#v0}$ablz6r4q)T&7yBESr$)gP=3S=?|#_Y_C`ifW0m?mlOj!F040;4-4`{JC++% z5;reg^yIglWOcS=Kb_Un61`)d0f_d!%taRcTW6>Zrm1ek=b;1&AI11IkeZc6(7GM* z{7Css@C#P*;rbbv&q}g9jkGyxf7}(oh@jH~76*nt-+%DTbLR;ciPZ*xdQMJVQVIx= zroNYXU8t-{kH#nfL`!b1!2-X%<;Mi?a%5`D2T<;Os{;M1fXg)`+;6iBoGqeO;4 zzK$IHZGN9Z0~&U?Mh`VQC)K=;&#e+<@no;EIiOtKZFZzQy_&eI?b)Izlf0_`o%t@* zpP3y~Pp?s;FPverOFO1+e~2yA+ocMp0_`jhzpnqtK=6yADB@i0{Nd;%%*N>|ipbWYOc~-d>`!L5r;gbsR^WvJP(c%I2k; z_1yw7g?Ks~OzoSVC!3X(huA?p9`+Wga)ppyz3+CLl}7+P-dF9peaAL9YyL?>0c~+a}hehIEts) zUU;4Lob&-GPisKjNZ2s1z@3zqojBh;eqothQ2BG^mH@= zSnJZFV*aHsg~#UKSv=z$!$Fko|7#kKdexnetScgeE_?m&|1O(f#qJKJbk^Cu*;}@x zWH%zFmKzavmn~t&SLYu$Ch(It)axusMXwC@d0vMDNI~bjeD~3YcjQg_u?YFq=uE( zMg-av(@bhZf62@`u_=dB-pMy(d8_q2f7$p!2_qs*W$9m{uy1jlOjBL@ zhsd$@;(H&GC|2uvauU;G*4b}l$#DYMSuOwsuo7B;$8&)g3a((MrHH%Y z2RWi*RA>IEdEb`M(#B+f8mNOsVL$tW25gC4Zr+lzuuBuCj@r zFXNx{;hZCnAS~-t-xb=QXydgg>^_M{RET3RnhvcCqv#=3hKOhzzR{0?bO;uEKo~yf zVARV0sZ%KAC-u<~ZtBO@AQxK9QGgB9R*$Vvf7+XbI{D4F6+Hg+?S7#ZD3+A|)TkP{ zSn?;XbgpPQ)1YaYyS5GE$MT4d&D_~>J^b>`tjHYx)49S1UKX4k@8Yp6I25I_tStC( zQ5Af?*Eh0(xX=W2o8v%`zxv(7t0(P)19r!OrYwJ_}%lZ^gpd zr|~Fw`OE89uaa;mQ$A@9y46W%0~yQUi2mi11?qm+$d1D6WSR#%@jyM}ZHTbIlCS1? z$Vpc|%3IVOchL3cbaXwP131l+ zN7axZ{dQvzkZXSYbvAQ7ohyg65;xtXxRO<^F=ig7c~4^lP5U@Zuk|l?DBmKvf67F8 z?=~&GOPYWxFRAkfkV0IF^qSp9f^H}KV`YQQzR;Tqar&T;!{wdKl4&|1&AERW$*X<^ z6XD#)tE7}smF&*DC)JGXG2X{^zZO=)Uwi!ixt!lS=r*o-8?&n#*wN+YSi6M zF3MD`FjeN!H;2AZ5LVG3y!xzNP_QUK9V(qC2D+q4ucA$f=9b4UO%4rd8^V2DWVj#oi+*wi)2&3L`NL%)Jr33Qy&Tzd^g2EYxj5jl;%}_TJTSQ6c`5l5SVr zw(JJe$qx#M0O}kpx`Fyne=VqYG;X-4PZTQW)Qm4_+V;+1`&A+%%X|T~z+wr!$)!P@9(_2Q;L z7(dEBI6gECuDlrw#CaPH@@We6_hf0|{HJ@ahUzAQv{_H$EKjEtHLSyWOcTSf0&l}> zwRNIFI2v8^t?WPsF<(i*YoF4sWdAAeEdC%nG#}GA9mRZ&m z!|F$Yu9Wo}p9`Udf6wY|P7WF3h!_Ug@m>JOwHd(rH|2gWLW5{mY!)FQG~i7GHZ(Px zLd%3=K>s31c32}b$S@D5@^TFG6{Gud%lyos(b6#Q8jS}7WmYpqlIa;?1T{a_8F`l^ zIm`l@%OEaObq@KExkeNUrtiA(YMx#;B z+=6@q2|L}Ee}q_Bw*04qm11mI#Z1Ij`^x;%M)*MR5=ybPQK@v*&!i*6nPF)r2?Z}+ z?d<-DH2zwBf1N8<-Yoy=V3F2td!Vxb3T4W++Yl%muybGmIPjJSW**Rf8U=mLfLf{fpn?6XHZt20`@#eS8cRWKqX3)vYsQ(3D6yA2-_-PKvSbGR1Z%- z$UzQ7Y=aI!L-km#FyQk9{eBgilz_IrC}l&~6buVye{}?qGN)fnxU!FEf0h%kMsSdf z$6-9o=$O(E`)S&EP`idH-^c)6B>;Umzd~UXnF-(0f0*lt<^8MCrrjLn*8$OZZ+-^0 zG9I{KD{|;u9z~dLHTpXUN#ki#4Kq?Hv*H>BYLvK+lEazdDuocI|vpkAu zu8WIqf7hsm!9|$n!P`jg(hmRwpcFR8z%Rd|^g(HCAz=etLxuUEumjBXw029lz={^nLyJI>1#%wtVFk`mnlkH53*Z0#1aPInzf7I&e`Kv{0%`7Xke7aeh4&YJc+RbmO zwDJCE|J@(Q2gk1}^)}usQLUlghEqmkI|OfH?8V{nJYRZyAdIoRh5V0Bz`j;jc&@0+R04CMsl+2%Qoxpg|vTyNqkN& ze|A3eT#G#7`C$iXI9BX5$-ONYnh54;!S<#fCB9%>Q$Dg_{&IC)PhU?2EZg5$?7Ep4 zFR~62J-g&DHcY-((hgI{FB|_Z`7_k5iC8|_u10W_XhdwO4%wLI$+SsDbx~hWSS;VU zXa{LDUmZn=D#0udA^+*@5>0kwMnoN8f7V=<|BwH4|6Lvzg&lU8StaHl6g4ztO&F#U zen~8wTk$x!;77bRb>eXlSr3x1>(N%rHW_M6MYoTf6sxB zzBDHrKg*Fie>%EaL)tedCoz?=AB3^4S>LB}#+#yVYS;H?#q0ZJ>H2eOGEe10q~?KHuVgsb zfBp9O*E`VCp;DWg1*HmHf66q|_*c#db%}W$>0@b5>o>Z&bvkVDq&@ zO)@odM?6E3Z*FT6v>}nbSjwe#nT?PQy1j+!q|2ecwlJH;%pff_w@@c*{bn?+K8yI+ z-ksvAth^cgbg=*PA4kVK#|KBp2fIhj*QS$Sw1OwS`h9VzBy8K#N=<5(M+2o$hS|kw z5~f3d9khxky%NRCe^JTCUcm*_3VaLoy#oD1w-CtXU)I}O2yWiIFYApqtGn~XuloqL zZf~LBs?!rhuK%t0-u2s1A?Pg>STzqpHn@<(=}7iUE+}^b(o444U399i4ke^nX%q8w zt0t#(8iON8@w9jyU1zx*2l7*t_qLF205#R=a7x)NbxK;Be?r~H*ceyP2--=9i*yK$ z)fRAP*F~#YDdt6xIpe`*O?@%%%xMzPEzhp9Mz2Oc+0JOx;HYxuN_D|9m#=I#d9$d+ z%~|B!9lj4{8!j8ajK|7)&RkP7FHtFr|Gnb6x&QFdrg;3A+&9~I#PeE8J20eGxK^C& zi{RzVS~eg{e<^fdvx~w3;KItm;Ga`=&Gj0%ER}x|$bf3DUxule*bE;$} z&z@qfNJyv8n?-ZiPDUg|;*6f+WbJ1uKaQ@6!ClioQnB|=F@mwj!CL;~p&IKgOhHas z>*$`byuX4j&*j+A9Xe=i^NY{f*V0N|x^IQ!)K$;He`bB}VVt9Ks1BgKGQm|~>klVC zsGNFZ?+?Q##1E>mn=UsxL8rz~-o_y3WB}FkGqA&niwUT5U5$yI z(N%bze;vlh$)wlHP37VO1^ldi+Y%>TsB|4xx6er*#a4ddJ|}quN}CLgE;?L@L}>U6 z&~`o^jnJ-F8Zg~}iez*u$Pk)_KsSi0(8fZ*%@(pTJQ{<*rg)Xa=axlkcAi!Ft9#oh z-avhWhG}G~`QbnYadw&ty_V?%wc-=O(#1&1e>K}l)9~7i2;iNa;zBRVJnhi{q)tbD zzBuiH{^Uq1rXUrIof1>Ls#B^1mPuZz&0kNmMvMQWyzbrE6y@(fQE0Ye7@EfwR2X&A z@t5!Hd^`fTw#r;}>H(x@r_KNf>@h{g`FIq8ZRL&NNT!j@mZICu3ONG8to#}$2$!|g ze`=gwm0V_)O~p=oSoUglU}yOh@a!~-5T3MKE(nkL*+MQnZkqnC@XXI9vai~dY9p|g zAKIjrxY+3G0jn-%dAAPi@(}~J6jhKX+5}6DE5m&5260^>z*tZ@8`@>7kg8pDJlcd^ zU6K)N0(tEl&qrqR!z`L@VTS~@D9}mHe-g?P+NUC=vdjypogRRpuIWRw0}BxEnmc4` z9U`IeN1Ko>Z(){iqIOubqm^Hl+?NZ70w4)7wOojbdBEE3wew`=>tjH~VK z>NEi}p59zU#ATS{+{kyu+hj7Ge^AK*3KXaYpeJWVre*OX*=_~ZE@&z$;u7jvTs0LG z=~&RYRzlEmgV)=>Mx^$Q)n8_!1}%uDw}NU|E;48}tO7IiQdia7RwsE;K3qkE*skTA ztK%(EdZ{7xYKeUjosgA^UvMi~Q+uzicW-`kV7dc4(y-2KOGEgw^#gfcf2qjF4qQa; z2YyK6U9mr&!T@BtElT#6w^We+sM9b#h%RQl?6Kks_dAJI&io>rn9MS9)Lv=<#vdV_#Vx zwVhjLP5LO?yrgpD`**LzC>iKPu}x98_=(j1nn9-maVa|Ws?zDT?i&@pkECkSfBr(MfVnY{&YS%l{$&0TbIOoGTDAgeFKfU*0 ztCJf+$@=#6ktuX2!;!d(@(b~w?*_?GigH(dzEQAuvcZzjZkFkt&u6&{YL?Fm=G=V$ zIhT)J*1*}3WZ}Swe}gw~-yi?+^6=g3o#W&EcZDdn@WmiGd#itldnX&iVgL2({%n8ICCvrnn!nMwbTVs(_m z#Uo7a41<%!XS3Y{oNsnH1_8_lV6^*=;*Z8O8O4O;wwNKGe>~rKC%&^0CX3S_o!MGP zW|g$3=~7ASL%S-QLXOlr+CLj#S!7eS zm&5WA+mG0c^L-e1#gRHJlKxz%2R{VvP=1XB{)+I67L<4BXy{%Ovlx6%`1PjC>vX6+ zpjK=oOP6yW@LA$JNBH+8+r?48FYWzk245~jZ+4B2f0~N$yUh)V9j^$V9a@dMH!tY} z_ZQng!UtBCZ-f7I&xQG&v&45sz`$B61&grS-+I;uv5xPt04C|H!8(3XfL2&nE)Acd zbs!z;y{IEyJ(a90&O!bPN`X>4qE?_(M=2l<6V(6PRx0+>fU*%;yE_<`-Xh(VAa<5M z{}N$kf84itd`n--qiv@zrS##MN>{VGffNf~_oCQ$x_eQKZ~yP=ae}H)Dt7Gw+1L)Y zPBw&$6--6e^)02(An+SmB43(9oY`8jJ^T%BexjvW4SW;5!L7d4vYc)uh z6R;~EHuT(t-~_M2Q#nF;;h^^oyyzalfi6z@f0NpqC^sD3zJVJX6#s)d8z?6n0B`2x zojg}32jztW>&?9U)L~XQ$bSPTx%`v|FV#0uK3I+*!^qjE=V_AUA{<5MF@?Anh;@AU z_K$Z5-~Vu|&@5NzS-ih&?$p;58pc`iy^B1bJn#3*jHI#svA_K!*b467li>-F#SP`W ze`>y-pM6@+8r=*1?UN03-nqiInfpmNEbj=QsyJfoG=vRKQ{CJ=8J8E=BYks?K~&{?AvIde}qn{I6jN=A7piL@0-O{@7D)n-c|#oFiiQ5 zVyTMHs779g)kib}Ge~oJEYAA&R;TTVC=0f_4GA2JyCV+A((VrDWG@Wh(GzpR)NN3T zkF)1orQzhb@{yT;r8i!Wq%HuvNE<~pvisSM=}llkEpxHVjmi*zO#P-+-^ot_fL;C?+17_%^grKwZvf}$i8JJ*p z^kIzygLgvXmysL|U5e3Unv+hccjd38fcxmFo~XqRg$jFI<-p9)i>cxxu1`-U4bKv18?@_oh9#c7znO-9k+y7>6b{!jbw=#xvT zvR2;%i<9ukYFCyNcX-l3wq8ieQF3`J?74 zQ=!~=@<$nN%tO0Ojwh#7y=WH7j3=)Y;Kl4#$gEkZXzw@dSkbJRf0g#mx{kHYZeWG! zt?O9itaA4=^b%@hiYX@i(eRCep8awiORdd$c@`{FyZdjBNti@=!7YWxfL8YhPzvu% z(7?Gudu;J+{9Vhn@ofC`{+x~9XjJXYfF6prfi`|0h1_s^yF=FN?uWU_)r|R&eN=zz zV2O87UxypUN3A!ee+R%tvIC$x^zDaBJfKh8JI-B9;z(OoKdkB3&XOIpf2oOI@ugbF zlH^S2h5;Qs54iWg6z}T{nm#F-FEK0HA>O9Rxl&*=V_=*O`o?M?uumCkhdUeECsGs8 zZPBHpfgxYjka_c4dwe?<^?KQH=}*se}#0H76yj=Ona;?$gBOA z$M|x<-EHl1bea>~x!x~NK1v&m#p-aQurk6dxt|#1T3YrVJes%c(y}Z+wXdw%r9l1t^b^Cf1F;+lZ{QG6oq7%n4g9+91>ac zo4h1DlKp@hh?$?MkiPk89Ht-5Pt$nzbF45>#^luf3{(I@V&#gp2qx3KR}QQ)@xhB< z_mNpgRI)i{ipi~Vv$MDN$MNCbA;J=(V9l{qUFCVU_V#!7ULCxFW(!f0=2$DY+&o|V zKkdIce@2)>)Tf2{DmH(WtG)eK`^Wo#9Pb?ci13A|PIG(}2eHc4tAnFs&C?OU6l6G? zW2(S`DpRj_-u;M96l5fu<7tLYRj%H@>BJXuam?{GL&|y1etdKI^BaUKj|J2mPe;JH z?A%JX5H-@CT}H@-4VlU4Rh7znjfP z!-4*GK2>dw$i!DXfaY~|16NSFKmf&ugGH-Vb8D7_8Mq?aHQLvyR-V?dAl~l0JDOFZ zeT2-@vDhrni0xJ4)$Na zJ^ppmuC*<*d9rb`(I|m=ss764O9+rNuJ#8AZ5%vXy;g?paJG`Qbcer>KgP*bY#|!j z=1~4ra_cT#g0|+)5ZPQsKhcGdx6Lu?C;5ev zA?&~UlW**Snk^3dEJ2X~fGvUT+2@~GmII&vban$K=**&pS{Kjkq23}HbYP*vf2>a5 zk@?@ajqI*1JUD!=x@9IB5>F|yN&)l+6Liew5ce%@rL& z`sEH{+UA#{bx9>9A3srgYVXcwfp8ii(mi<=PDlA1yR`ICth;WsP`zBducFz2gN*NH z0}c`^we_*f&tf+=yZr3Z8#|fiT`p~Q{aJl27WM%V(LeU;a9x(Oo6-aXe;^fd5%659 ze-<$ao0@eWisd5&JZt<_?l)1yO%&YCq;%lWKkBTyZ_PLtWH2E?*@cPe(wGG9lqt9B|z zN$_HNb|zCf{5g$UwD@EQ26#y=uVG`avf9|IPC^bmN!FiILk7RJ3C2{b*fBNUeG#U*XPN|y# zkA)Q-PY1Bbh?U_moT!D%W=ObW-T{UP0FhyWa(=U5&jxq{lmR5FQr@TdZGbEQMOCtt z?+Z``q^TO!WG?}zt~6ta<+-Z``poHLh~L9|%8;M*+j*0bj&`BpzExUkld;HOrtK2N zr&qqepQcF~=+)R1e~Pbr)-^${h|22dxRd6<6Mt#C9vKI@_G&Kap3uvG`g%eZ*e<^L zlkqAEhqPe3sibBJG3Ne69CVd!BCLU?>WQoGB4YKAVVH;7xD z@diRpI2yl6ccdTYCdT88Kn}W!zo}p`ke`%(kU_>#$O%^xe>TZl&5mVfud5Hu zd*;0OUubMV9Aut!ryX3{bY zil!Ed+k1lGVx5t~EM6&rVj0>LrP00&+uDBI-+J07j_C7p)}esOCy-!SGS9X#KS3)2 z(u<}_+wlRqXvk{yWvjpxOT%XZjZUq;+V2N|L9~QL1B1`{ThAN}^7%unYtsuLhoE(n z71>2+f2EF>CkRjyo|8wkdc#zlqc>+Hxy#XYNuyG_^I$X`%9qp^E2FEqh$hK;#ZSTU zyPY>j2ULxTA41fnaB7gsb9L{^l%fNzYqd8!1=jmOGdS;nRnjM))h-BX^%X=cc)C(O z{V4*C>rz#pBCxmuRrM(XfBsa}r>iaD0qNoCf3@h<;|Im*Rdp-WKkOB|!~VK#k3eZL zPtn{|9eR={|4{$+v~0Dh1_3P4GX!Eki$RzVE<~@Y*+^vk&rlFeWj;-TxWs1&6!LZA zXDda%XDITm-2n6qfkCJ8sunzrlq@|w_Gub=hQOoFk&Bd29~EqD{lDVp!5pL3Vx&I* zf7{=n1A->H*6deC`=au2(H(^vMTyzXd1e>BflMg^%D@TpRX}M;+%%-2cemGVZ*dWk zKXuz%D{UaSy~S0WvCygQEiMc$v)LV(98Az^w}d$a`8ujlPCmNmzaDj{CERt%<6oH) zwS?C$%}ZRJQ*dToxUJK%ZQHi3j%{_)vC(noi*4Js?c|GX+qQA~-@DGmIaTXotW`B{ z=GA=X8siyjmddiw?-dxw7r^JF!5jMBYCr-Wo=Rad^W12_z-(dijMPLNoATKoZc@5* zN(`MeE4@xl`rOfO=>EvB>OSMMgSv>OcvrqmFYRfo-Ux=EMgT5(=7m)r4t>+=$3NKQUwhom zc?qR_ch<>(542TVT2qAyyg~04TB-%aqa#Nfw+c%qlsa4I%z_HAz>|2Y`E#z12LwnO zD=4z7`~5~7a=B@ox_?-UgJ_csd4K1Rbho4ckmHLqqnyZkYc`f-)@wjch+1z;6RCJSP& zi0?!_RF=W^itG}yg_pB{o~L8cycV5S$?nFY>6Ve6{`1)fprz-1AdlPo)#;SF`N~$H z-R)bs!^`^W^df{8%MEaqcl~4tXOf0qqD=o^SAz^m7v^kQs1u9aZ_EUA*YBTH@v8I4fBnkCk+|}TiX?prUe%;Pvecb2HR;wju09f4|-$==N&*2Z^JrV@TFLPnnX$TOkROKx9O9Z1E1m zx<)d%3`^mIssU{Etk-z=9_J!RS|SS4u%G2@5fd;{%tHDm<2|MbHY4=T2u7okl;s90 zxwUSv3&ku@2-UCI{&Ru@Iy7Tp3A zY0}ZqtYWQ$rJ@Jih7RslFUrbf+R_pQD(2X|jbtr=>ytX7H5=!9$!jSH$jLl{MYh(f z`=k07Ey272W;B=my|x9IK9gHT%fc6v{j*!l^K<$YwOCEjM@jA_p}cbedaC|HknkrT zBbd*-JRrU3Z&SbsW$&(*f+a#)U!PEzh5EWXpW?Q5=^txAO485Qny@+6C!;mS2d{Bq#Tl zFXQnJ0$r1B-_1!wO*Bqv(FIzw6DJ1D`L?V8Y&lhm@!OO%b-f3H`xjE$_jq8n+uWeySRPY@}tPQs@|S&(F+DUycZ z=Pg_qhDM7TRq9aPMnE%yQszpT&MX4!EPIRpCgBhyF=J_--TZq+QlwR298eoo&>RPF z&Cl76-DT;)67Y(CpUj}#pIdUjaA%!xy*y~b%2aBF+xJLvBw!@oR;_%KL(O+~hM?!9 zt>GbLP3tL0M|T|R-g=gE8nbwbYbvUIrXSq*-d15FWJu?zpnCz(v&@RUB!%sDF4rz~ z8PzV=N?a!^OVW~*CSbpJ6yb(*Sg`?1QoxdC)K-@eTkgQ17nR~S>@I-wO@#c+v8r`} z0sA6^GGY5U%Sia_q$us)wit857_Pw#8RZ9Uj0SqHkI7-q>2G|B2^%Bro{?gi8++=>IHrhePH7Slh2_pni7u?1_HX!@W3eBmKP}Qpg}x z@E_XJH=0LsHsr+9Mwg}yLwV_OlOC<6ITtCb`XyYk&VW4+vnI@xh$uRoA~OsN=;2vi}^XAd@5_B#h2RHR*?8PL(xI#u<-7Tl;Na3cWSk zn}w**&dps1R7shEM`i^ueZHpKG!M1H_d!=;?y|aR(+$;Q46&i1%En2UK7pmjjA}

JkcU{P+?Pbfk1(_k(e?xgewEia!qoHsedCUUnb$l zQ5}@?Go6z;-BQToeef$HQvul*JJ6CsDA$hRsy)L%#|3woVn9=S!yiX*XvFz_u~VPu zN0I#r(@$1!)!&x%{?X^`!cP&B?>lL(YpY2udx)3qNA4{##-)<8;aJFVGSeiPE$|#jSfg2UU`lX+_YgsPMt=IW z;P-;Q)gBzyqG~JaZH*Inkm3=rGDC`n_j*KcP|0u{=HjCaUxjJB@OK6<7TfPpL@sF3UscZxIkadUMiM1RvCs*05~5 znclZ&?qi+mN;d#O-8j>DD#zTBAnJZFbobZgLjf>NDJ3%M3zt}E>dj7i@TWQF57;>- zaG{qFAkRH9`Q$wpwi8@`5~yUcG9l{LZYBSqJjRx_)8*aD(}l~tF!V!P_f42%8a*-P zYBy}dkJ<#1~mYkjgVlRbCq>) z{rKhhg>0%N`$p%v{mdV1En5^B4iQB}L;Y*KF+YwaP5y|T7Qbv(=vq^d3!^dEd{ljX z{=F`OAa-Lf{~epR5G`y<$aBZSH^D{CJwQl@k70I|g5s7(waL&)$WSpNnBBtS+EGTg76eP_IIsZ>}ez19GU_cDEFMh@zOx z)m^5S+su-kd%+m1C?TH3bkm`u;{*}>xf8yys?3#@k^w`3GG?RooX3rdXv8J+8DN`k zMf4=AHYfx3$ovzLd(JR7o#F~Y2hB2Z)L;)gHtOM$NDh7}ShiQRh6*@oD+c<8Sa^$x z3~tWZMr9ar)O-m+4zI#BLZJjCfbKfW7h()R+H^y&;C|#JY&yVIk%U6&Qpc~4N~aPw z#OyjQ%^<f2o{ze?#MY{$ zVSVqR?R*W{DQG~Yqo*};)p~he%f>MZ-q#?o1fN2|)?y?{_&xM2<_}%31fY8;M2=t;e)+p+DaEuHwv1;~z(u;+O5$%K5TQRsVOs z$%`}gq9vzvALaM+!R%36V{_vVg$zYY>tiuZX4PGklR!i`kt#|1Iitq`SlO#Xl6#|n7}Ii{WB58TENZkipITdj_UPT54 z#+5x8vQeD4`b|~lP(Th=f_r^wKmkP$L*ahhT>GwBdUrgmv+o=7MX&;!was_Bn}6u$ z9mB`@q3!a<-K*D&RP-M`#;d+SANtegP+jlSI}A9+Gshu>#>Zz?LLc*_G zzW=HgzD)$Tcm#mS%PkQe zmx$}x!1M3`$k+1thQ)r)CIVA5D~{>Sm*F7rT=jNLaU+BKjoU%sRi;yBufylUtR^-v z!_2&n2p;s5s0}B6Yjf-G+WOY@C4YdF`p;_>X+y>4mYlKkC^2_$7czgfR%39Ywme^^ zB5l^&`sx?wcr#Kw$XP0ua5Ml6QPfZZ{5QynoL#WCXBUa*o?Lv|Un`Sl&BM5l8S@JF z6X&r;yMBMWa1l~d+TvSslmg;A34Ua;XAOB>dQ_hHm){&UTxZs#@pHq|A1f#&IMtI^ zU$R*NUbM6jo9Ik}%)QddbtHloR*_d2K}^$n{6bmHI?F}eV-o;EY zj}M(zR57?8ILx_$SOc2P6gOdqbdO@@s5tnq1rE{zqdKD9xx&yprgH2^kzY^AtDsv# z4^%TLySC?SSh1n8jP|D{jS3*seD%+_q(2>xigQ$0LeV~wy4~sgMhH+PzXI`$E+}!b zMY!NQxW!w2Z=7IEDF@0{HuycGt3))vg&gp4EC<#g8K(Snr+55Df+BQOLW{AdVf|U)e`wd{&-( zLs34BLfz!rwGCLWzo&0HgQVjk0SiUP7*tRU7Cr@5+=brmUW6gVrI%O~a?mVuje@_+n<0%MJLxDUR8y+qHs7`A)5b2+52?CS=y;_I@MKGm@{`AQ9|0Ed% zd@ch%Pq*4#M9BxiMRhY=aLLucaeGFQt0_PZUL1ASJCH2ne331}Vu*yoV{V8({N%1^ zU><$f%!yt8G6(`NbNu$qc|}kUX#Dr~F(c*U&|N&qL&ZFa94&Ho0n9m(w{fv>CwYw9 zZPI%gg8+i44IgTtb&-8$zZyq?9Lza~}@I_v z5XOE7v%KU+>T6K!rGxxLv7R`3YJ&xpT0raaaBHaI_**s;RXu-lug1%Zqo%{>=W7J+$7u*iy-SFZ`1^{=G)ya&Oe zRrbWk!iWZf8$>MOo$=}Qqd)yyQjUw4cbj=N26PzSkSDxe5v-$hKS|%B+ zx3pgtOob`p_PG)2xqmPO`02Vjryc%|(F4rPAniU6BJf2}ln1#aiy#jTGLebT=2!{L zIV(OMYWX+gdrXA2WLu9978rYkWAYwSio#=Y{p82#VJ#t1u*(#pQjYEG*#{9f_;l42 zzmh&OR53hBV|v(dj0KDmJA8E=BjQ)vQbMlV8o~uX*rA&CNoPy#Hr~4LIQ`(%U&!Ti%b3D<=Zfv4AcocwJGSikj{# z@7>39%PqH?loby#@lHW@B-@m}!~^zi8l6X7V~@xPHe&jlu5{`}Z;OUTw(EZH-(lgI zBy7qwTeL8bWef(Dcv%Cr>nT1Xq8s|EKS5EE0hv**S5}Q{MS5Ti9*{@b7C zGc?|o@$_GKKG7qGUzxC3e1+y;wZedBtMz6M-bDj1S1(%$Cj9qhBk`kq7BxZODIA7n zrxRgWy+h7yncY9Joha?Ko!tc|#IT+O+(KnvVPppx*_Pj3l3EEf_E?2kq*(4Y2YV(^ zPow8H2w5Bk5=H)MQ|IlUH2_Rw18!F&MT#S`-@I`OsXbh=jUF=T-SaY@kZY8vlC+O; zd(Jx@sp7a2M;{>tFi&1teMJo8j-&cFumu04nbdsh0-VvNJYx|Mu}3jC#&R~)x*_sP zYr*%31VC*f_6W0?yzUS-2Sn4yXrz2g9~_yy4w@zf1f-z4hzeJ~;Q&K#goB3F8|@4h z&-m4l=-D;k=mzv)u%qPp*IiiS(BQB)2rD_pM#kM2l!2t7Coa08zQe|_o;p{wA($6e z$pNsPc@bZyFJ?hBQXwfFeCvuegO&$SEq+3dVvccx02wB9vK6E@OR84P@$bU?Tfr@_4?->XDSh-fwEW+-yr3cHanX6_2Rk1uY{3VXgUcJ_*> z)(;BaI>$3bxY@8MHow$kzvT7-n7LxpvyVe2Ucp=TJ5*Cz<3j0Jhu^?eZh+s9t{)IW z=VPLSN}>~T`h%Z(@BtW9 zyAKbwf4XyJp2Rp0{u*uJo)0wasbykNZA>J44WkTi#rjw)&08b8=f5aO6H}@uWA#So zz=rjLS#RcGqIKUjW|%akx`{Q^Es&ZM8=XRMR))oVmKAQ>H>QHV?T1k(G2K^_A$s@F zZTXssQpw21p#U`R1REGCTL<`)yV1+MB8KrK*e4!!97PeB3sJ|IeQ?piQ>#MF2{b&x7ampK zg$-RC!l_WcCX`s#B7N#lu*tdz93ZG@%kr%zaP3CofM&S|m z6rO?yzwbR1SGpv(=MmPT{K|a8?buDQc4lhGk)-M_SRDg=Ljjw}!|tP*bu3#vu$5?$ z@nT%0(uroS?%~1v(4*L8Ds;_g`Xb(+A=YaqH14;~l<&6*q(d0TRv-$7H17}8ok@jp zXQ|F$KY;(9V}U)}~-wB6r6F3mez4lQ>=uJ!L1Wcu#4?+okfta98N&JNKIQ6MihAg8Ck z7SBq8^^`~D>nd1r?TK_!YGH`A_;qVqs_u_dQ=Z*1mfWrq0q_|R@7 zJ^*-c%%REc+3t8!0=^e7l&~sk4JlR>U_ChEXqMHV@%?#XOQ#oA8ZV6> zp$6??N7k2N&or3EBW|N0}jP$rWvq7ACW6w!se@-f1uj?8Z%2exTsmS!tkSK3->r)PVFuw_g<0s*Z^Rn z3r3;O+kbguW#QK~Dx_i4BAxlDm}|<~Q_nvrQIt4~_Orb0|EvwV_Y59;czuP)LZ6Lv z^Uk5D-pcS8#e2ZaT@*VrwkYR6^dQ=7@46=!CYZWDykg`BC)i1-O9~U5%jOoxf<)f% zq}r`tSPZKbR>U51d(oY8IsQ8X5eE<-?bdhPr387?Z<3f%8Q*bfYJK*P^ui*>?O(x$ ziiUO$F_Q$V63q3*rQ)hiMhJjroN__^J$4u-vSK`8dOQ@Sa9(ih1R3HWXTiC?aW77gqYMOrwl?7!%cY-a|&Agu3!@rU7ZgoHhK#wQWpw zjaK}5>yrl6m_UPgg`5;YW2>!{~F9P8OgcHxUAXfX*pe&M?BVCKetAse?a`Jcl z={X8L8w+$V}2MBE)0&_sjrFIMVOH^e=lk@ z%r_0Iwv7Qzkd2>|d{uSI~lT;cl#MGUUzv!|jPp&SMbNwr`_X4^ERZ%8idCUCT1S4ShC ze1n@+-2OLYY_{pi_{6pEG*k*yOnO@7!OvDFn~@Ajs&Lv3`J5uV9c8S@U#7l+{8FBd z%0lXo+d@P?6>WqtI@bC44&Z4~sgsgBj*d3Aw7()dsdHl4Z<_(kmiBP+%qz>k=oFWo z<(f|BJVwu@xP+M7JRk%sD>AIgE@nxawVa-46pp3U5gO=!Zg}keSTk^&==^GHTijO;%F)V$= zf}A#2qpMHF=-L8+6CvWG5OzA{6(6x^PD>GuV&AVHyZcP2(3SRFTv}aJq^^-Us@#3F*c>hg=_A75A!n{-MrxkKIRhQh8Hen83t-y4yh) zWO<`kr?#d$xp=w+0QDLj*EmBrzTkbT96PGTY(;=wqnhqJ^@z$H-yM z8fP?Uu`>XF3kp>+oHmq+DbaHs166fcjTtk|Mia#%^!k|qlhx9Gn#HemjVWe^)IUe3 zq9(RR*|W*BFZAqfHX-lqtb=>cp1QW&`&R-USb;%WhI;P(1XxYk;VeAZ7E?SJ5BdGC zvOhsYH^&Zf)a~6iSVFLzD6;bjliO2N(=5-zX%GQm2c#&k6^*D?jGe2lvy&meWN8@4 z5ye)l6=O9AS=^aJ6j?K;8kWN^$_OijPkhi4Q;ezzA4}j+n|a;3vx)9fK8_ z;Kx-1Pm8p1*t-+!KN}@iyOsXgTm!1RHfL&-mV$qAiq52MP?s+*(f`KNQiPLt1me1D z>-Pcb&af4Em7|UATneAz_hF=<){wwoI1e zU*V>-MCBMH?ynV9^gEQ$&!fYmbD{8TSQ%-^ydd3kJfReX1bg8<(R>w0P&09f@N@$Z zcyfRZpWrt1v6_nQTNu$J;E+j)h|*=iY&F=p^8;JJ4KQSbd@7u~evNh+=0Dr$zST`J zb4Dh)|3N){qawyLlJ>c@S&j88VypnpX=&EAm%H(XuQr`baqyPN%Uey({?L4x52kfK zt>u74sBP%4C&L_ahALD@{t*ao6)6F*Venm~4Vi^~OEmq_@E^k#ilKpeDX8mxxmnDT)Ydv9= zQVdEh;+th$bLO$H2}fCWIXi@?M&O~AoznXwxg_Z(0+>Cw<`8&v${6VoXHg!&Gw|#D z96{^h93gQF^>lQnnNe|qv%E?AcOxi2(oK=e3^uhG-Lz^ZyKORhndalape>(7oX5~; z$>Igg%j~8`fK%D~f-|W{PM2TEz$1hq_99uFsiW2o6ds22j~-Qcp1U3@yHwYSXz%{E zE=vj5F*|rT>f}KVDFW72eAN?%5=@dDp7AyKOM#PMy3 zA|KL&fX-E4^rdc_U zY`OSFTT&}SVy`GIdY@YTPrq82ag*$yD7HU(e~K_av{r>TL@3YiRvF{~bB<9c%o231 z0pdR5-&k3QIR26C=2uJv;`zm0s@-$kW>`Af*=-SxS|1yOwL3%1FN3XI7EPWyZEQAr zwL5fitK?zfKaFE;u?8;KH6ngBI`O(d7cb6RGA-=@xAyBGTj!haMB~oGc^zWUun_L; zS^9hXWB_zuQM&~XP+w^e;jaU4ri?~NNresi#uwKWgtM$9}nwxbcsMMy8a{-E;qIt8Ju3CIiT3dIFm?6nGB_fIA6k zAF;zF2@r|ZpRKLHvN0UrUe2MKPe1w3tZ6?{<*zsh9>P& zB+UAa;0K3zo%OiC%_H0f<~wzR1&zs7_5gkywUn`{#`%1xP_>C}?MgtY^UhjWgYaA` za}xeu;>ov>J75fD$5YJZZC-Ql{Q-v4p+*!63U!2ed_}ve2xCRR?zfr=gxbsxYt@ha zVPf1d@{wrc8b;)zC}|XpMlc-RWd2l6SrTp1O2Ub|PfY-~EqtvwpELKd;@p4H zA5hsIyUFH}iJVO!BW@KN1eenE>g3nT;@N1$iUvlE1verh9ZI0Q1@>jC@7oEdt zE&YRGfNY3agJA+e_VL`V_Be*op_FNy5MbEXl8pPQ+j{=bfdA@ZtKAC4mX5=w zO_?YiuSh}Nb1=jX{I$F_fwB(kE*E$I$C>Thn6``W?tbxb$`zEmIKIX02`fKT1#dfi zjA(=u)TkVYiMsRS8{}j=MWi8avHSkC|IoZvf_( zCYf9A(+~(GYwBDJ76U=z*Gm&Rqw#Mi&c`m+I}RKTNY7@XGCN*RFndLA|>F8PS%Y{R=Z0A`x8U96kORrB&0J6jm9k>EH%}rSk;(mJy{C6@W2KwruLgRqD+-uJan0sDgo8p^X&{jkqCB*g4 z6MvCZx9^qGMdJk7>WuF+BE~4^vJhqCYDaIwLy-tjD$9pB~~DVcE_JCC)^SYH)0 zW!RfKvwr{c2kF<6yEz_^55lsu^V}ebzzuembM(}!2@o0K zctO1H+%BtlSy+(VmX2#b?|yjZCys}qo&$a5FO6Z40feP=?XDvKIwUKQ?4l-3-z;{x zs|m@9k&8(Gf-23i<{9E$t&FX}EYnVyTjh_Qkqo0S`?s}D80RvvR$(@(en4OssS!JYi0Q$233}K6b+5_Pl1vSY$p>kn-D1{ zdhS^mc&WhB-zs_>lZCk*q$lZ8UIKfUG4?&NuDXQ2X1l_M){Y!L+{o)Q+Zx=+)5(Tt zh>gFAk*NX-ZRd6O^=SW%*C6-ycJ+pJ+T8;BW-Z0NkK`-70N4%Y?pK;_!wlYmQ`NP6 zRugMa2@lV<12JU2qT`ug8k`GzoB9oFSEjAS*wvqC>^SJ~O8Oa1kM}k2kxOPK~l*Z9tZ^68&S_ ziF|$$T9H@((_(CN0`mmc5QaM!xV?W&L)@yu;=3yiK<_}XWds^pKF?^i=lsrRn^9qL z5GWgiY9k#4lSwhMcw06zIF^15r)W<57l1-FfA~pJZW_5I%idM7R!*EE2DeU0D5d~s z3Hk^f2w^G$s zg!~VDq#2_JUVx`@?UF2IZ#}*=cjGDc!`P^Ew|9fiv5Uk>RV@8bjD9BrKql7kSYd*+U6S0*VP1 z66v>hArlG1M8wz2(>=gOjk`{Z>K8L-SD#t97_Z-bjVSOYAk7=>*}Ae|RFr4tP$H=k zV7DdbpYcmFWnL4xz_g%0`C6^=9^|M@&|y?EB}h~qFSC74pmCuzN4Os+>fWo{n9XHx z?;0_FFl&$KJbA@olL#?jM)CLHndMjojItR+Tnp;>JjgZv8$EhuB(C2HF?<^QO}Zal ze4jkKe+wU$eN=E3w)SR|B z7L{xK2`Vpa+tv4Ea06|be_7-86RKar8p!=DG80*=%7E@MT&ma6am-F#c6*o{v{;w` zZR9V@pC)dF{K)?UX}I?~-kxoEvDBU|OZ&pL%{E}UE7>Pq1kH_gMV^$4C23g;Fpy$* zVj%>R#t{_d8fZD$H|Fx%?{aov}tpgE&FOQny_M}~H4Xzq1qH$SbP)C%0NJ()7 z8Jf1M0g;trC-CpizQvEJsY~PE^k+g3=o)xAoNe$~CY zYZ_YpP^+J<8cA58>q0|g2OY=RN{{`klmD8i0|9<7r!I@Y3X7A)gn_5TqgDJFHw7*Z9OcB%4*NsVmLwjN0N7wX+1B-EAgojAu)Tq%(w*q)ZEB-v z2cF_h%4}OFgU`cSwzazkP*|BEE&~s(o51AZ16%&&ZuF1C&r_=PO6ix-5Kcq&s%%dX7GQbbuRpF>3_|sAw4K>bMCXC!2H?Z$cuw@>6+|u+$!oZ!pnr*1?87tNr zQfor~l$81EW4eZsib5yCC&I^P(Bx6!HWJfG*cV~^VhIHUvEP_Nu86A4~S z$?M$(7%$`5*6CuU@Pp^%8;`UJ=RtH)q7qgTXojx8j@@fKo|y}-g;!+-1Cx*r-}OXx zcqX*%aP~3hDy)c0l+JM%+<%_?_t|Ibk7-?^M4gMP~$P3y{)%p=x@y?<@$ z_vZ>OYoqe05S1kRq$G==)k)cR1?7!kcYG$Ry3Z}E2YvjcT_{EY#BMGx#fTFb3&8cf zB=D-A*a-@$iVk~w6i(1mn!NEsj_*NK%gH|tR&BT4#NA$j2L?8&RbbQeOI_CB1~r|6 zm0)=GVlcnFH0kGKvn2M^jyAF`-Gqt5WctU}Yel|bBBu^=%hO?#Ic?o;Y-^k(2AWC$&?Zr~;bCIlITK9TP2I)DtW?G8jtsG9+my(pL*O@dw`n z1daL~YdB0OQZ-^aIofwPoJSXu)%cfyUe!~?&IP}haG)yKvAIbWZMhZ=!CVe`iZ~ZC zG2k)y<>j{Eg?a~YGw}GwMIY)rxy*w6^BY9Y8}e@X1~o@0V!C(KoRTaG{O@GwODhCh z9yW>`;6nGs$P(0f{hq!n?J{YZ6l@a9l;-4fPqdZq-`vpN~nIc;@g9o@su+zWI;fW(4ohTdlml#PwQ5w z&|g%|8lHc#JyOVoX zl7Yz0{5IthG2E7X3hHqJWz8}+Mmi~_EE2}6JY{?5W)z^{KK-i4-;nxUg>g3D3P|N5qvUv`t7u0Fo*la1}5@51bEE!e@MVuX|vKVf6Rc`fCT-4qKAl9)h1TMrYJcc>^%2q-b zR=(yo&Ys9IGDf|L40t~7;`pHl29U!^XxIGaQ4NqjB}c{@BEHU6^8N!sf6NXh$_#!P zd^1unigcI|TP95%i+Z4OMB$K{g0Hguj^;1LDGk0S$0M(6d4o<3ITy$3k-y}uF)hP$ z;2}MoEVbsr`iTCk*^K^@_z=rU_RkkEL%4BX4OR@3mDWY+b@aczb;6byKnwa@XF52( z2r_`dII=Y-5cIdhbpmQXhST|uR2sRXN{X;09`b+;JuLx!_>jM+g<$CBSvZay>7hPK zcEy}1A6AW`b-#hl2aA8^skqiBygU;L$LF;(IaXVeV`)MZgUU>iMh{THSaVqzgO`#faM~G{Bk0o*{DeQMO)P%t^G3y{)e#{ zUACEBd{Ga?DzXLvg64*){qK7TpYDux|8Z86hD1)*i{vMg+FQ<>!WXtHIH4PsMqxl? z?K*C{BSyfDVe8qq)J9&UFVS|Z!|QgNWuZP(Y6zRNcNs~4?uop71`c4dp3SU2PQ8Ua zL8f!b)L1=9Yzm#dew%f|li}!Wjc^;9`q=1TLSC?nWZjkrTcqPtg=%>Yr46N7<0+k} zz^P4drYkC8k#;JQzY$pRZO|sO6bmS7-gvW~MsR~-2W=liOcj@Z7LF*&*R_uCGD6Y= z`pEa2(N)!_tp7L>Hm?>EdW1K`RCcvApr4)J*l0 zfBR=df30k0^t0uT0?C;D)g1?)k)jXrKnGlzQXF)i;%^L@uD+&opIX;*gYVF1@h#9b z6zCt?v_k37ep<&jK8}{~R2dFe;){VaCgoz9WdLZ$W(>xdrhg&KWF+%GgQycqU6Zy) z@cC7U-{9duBrN!ELoCM_zW@lK2rRUH9vf^yEgWj>9!oZ~?Z&knyKX6?ggB+dDc|PNu&p2M;7JX) za*)CyOee$&=s>wNgO~<310|7{ADmfR!pjR9dI3WZ!w_~D+)>|16RBa0WB_VHkh^*?M^-b`=_Y|C zo>0Ll5oa{#)a>mh$vUJ<2V5#7N6Lk%7s|O-5dKO<+vyqVnLtKqqg{{(k|i6?_FTdo z`7cSk!eDx~6lXjX6tlt1zE4Rv9DRdLd$Y1|mkww2JH}g7ty0nShThazNjLShK9fQC zNrR+gqCq%FLqL=r?EziHd5OHOC!})}V>XU+5e=O)+#Y{G$yl%o+rZ_R(LNi-#=HXo58DY; zh;gsU<)|a+Jz?CL&gbR@B|1Vk2e@Umu{);l*sEb)++8s|pgiT)ta(nny=u2C7Crj( zP)P0h2d%#PZ-9h9TK!)Qs`z*Fcu+t zLbM3%F@x$v%FHiC1_RMya5VSwArsEjeL|ao#i6e~ydI7bT3XzZ(SBI+K1?ws;`|ky z?bK$(G?j4Av6bAsWS*lTVod4g zcM!QbljaLn#uW0lFfF`Fa7ge`WJV>$&~mpsLXbFShd+$MBP8caK=D3&A#C`|?5DA0 zuCjWzS&yH)LCMdw)5NR?HLJCxz!H>rY@sExJlIbT)b1=J4$PInW#xv+v@`ER)Pz$)E z0bw||zBIfnMoUsE_KnsrI{Amft&wIE*s%lpDct;5c>MH*hshP<@>qc_j;^SRq&*wm|k4;ILz==HgPc!?e@zM30yS0j|d<%J!A$ z|3Tx-6mBikN8`{GS@kz4BWul+DsP>9am_Ue)^I}8`40IEaB?9j_?)Z{d4R&Jo;0N6 zf$En@ncBO2-Y1P(D{W_IV&gNl3tS|9r2n?C*M!6206OwoIPj-=5XOCaL@9hSc@B?< z@_N>Md?>m&?=t8V>gtptfR1?(9fjxeDxyA7!f~thn`#HJ#Uu=|(2IU@*Jd{6UrNd} zhoc|CEzQLEd$7-#R_RHg51Fd-kJe+9mX>-|f?hJ@y&`usp}`MQ16w(tG7^(@(R1N1 z6U&dIs%Vr%oQB>SZWpcv9p%1MHkbL9J3+62wB*h^sVMvz31S>Oz`vf<$_X9zed{ds z;FA{A9tS1MMg!~;`eUk|sTg(i&iGdZP+hP@^OSyjy> z4}>r&Ib&-fA|jbDSW~rfYR~?fv|o0H$Bwb|(Sl9h)jL(6Tl;vS+21DAtt$G#TO7e?{_6Lo+2* z_wY8SCtjKLoGB>coW2_p|0+ks)Aa94n4!F(&iWjx@ql7l2*XqmIwz!tXo|ns<3@=S zIj9u)WM^;4HwcXne4l*U4?fre>#l~aX9|ACxNTpgB8Vdsv#7fXiMYv9#s$jb09A@*(aikv^=U-G7I|;L~4&X zG8$~=S+kY#ue_#wpo3`EyMsSmyRrF{ zf*5bgxAah0UP!k;Qz<#cgIT~k%Yb9|{#4maw8Gsk4aM*JQ4&AA>1xWK$6v#s29Rep z*A8{JZvT_7Yd~Md>%RTd+m$lOI}WoYl9}8&O|!REB1%#t;&;p$ z)GV%6Tr~wRYM`@Y0h_~~rQkEJq_M-~66q_Gl z4VldA-;p|*7t%<~p76-g*Cw=<@)X1rLwFJz~|C%<6&mz14_){tku zDmoYsc8J4^!~sSRmP92~?nnnS0zaRJ-eTBmU(Nw(`<x(gsO*Z{f2kOCR9*B;Sn@Sn+$?CwG3!C?rSdy2=-|4ZBKy=` zW&tW3&pYNnKTem|*uy;po zZiI&R^6rC~m8!!4*+A=FZPfc@d-rq4m2YlJQBV62z$#RX-+fz8g8f!_;25SN6RT?o zb+7ZlLxp8%W_;0hJd0q?pWz~KrZH2tEkM$y#p6+z%^MY7CfJCLv%FPgJ0a5I+na&I zIvHdm8pU$3@zhq#4OTo7ua9E%?`*eJK^UW+qA&=1;97TXb6)pQ!FIj?d!$98m*H>@ zJauRe557v3yb_It7_g#Yv5|`LSBiJzsELg0HZWISpGWqTJ5iNzgbBNB7kvruFTDYv zYU-=Du3I^_sWCX!QU;kA3`mq3DT7SL2Qg&<6MUlgx03xOr*wk0KEYfnkkDPAYqPmE z^y!!kj|@S5y}7(z(-(b;XK<2(T&89})#8$J)^9z#%`o*$2Kg80L@K2$G8yafy2h|q%ZfqG<^>i=15$JjWgp3`_RR~#l!45{3qfkU zEHXCYeMv8dS1!3;Qi6V>OIT`?EHcqg1e^hB4{Y*8ZVD7{Z<&Q!m8u^jGwz<$jCS7O znAZcn&D^QavdEMGIBeoQ8jGZV4I_HjzTRbwexuCw_Ub4(Goo3kED5PA=~A^k0TC)H zl^f5tZJebYrV0Punqvf!HoK5cBndC=?9^;@g-=;X_8H>e60rC!J((*Wp5i|C0LJGq(z zreFJeAmHn15gCYug~!Nu`96np!%n1PRf(WR7jO3>WI=g()9wH3dOM?X?0Y^edEUhN zmTW{zgF4?K#*`R=I_r_&RbTTu(I%pEEkb*C)b80DI0SrN3}EwSbiI9^7B+cw+-T@Y z0S|AV%PW#I<5MGr07#dh4b#?Xve|P~$y%cX6jnA`I8uB#QX$z=_&g5lo$xK=aaCs$ zX)xl;D2M1@9~c}|sRXlnAJD(@eu)KL*>I8Qs%z7Q+I#VwfGzwWSnrbF<@#~+vpGT$ zdpvey;blNVO%Newf4Boc&rIg#u557G`nPtJbiL?oTlB3m z#-MSR`rfTPHu8MpY|DLa=C6cRgZheEeRde7L>t)IrC0mh48J!w9NGT*tG>SlU~e{f zrwn)0xmG(IO@M&l``Sbf?hqB1EpI>8k<%t{0>vY~zSFu{KmeI58qa)b>*(=w06{uI zSXV-pH;4do0V3yW&!oP-b|XjLj7>@{dVM@1es$7xKl5n1zu z(z~H}5{nW$1QA!*-+uTtknDVninBY!{oz1l1}k!+A~8(Kmc@cNN$T^1xe*C23&#-%VbKb` z7PG%DSV;HxFO9PC3)X@-3ORxs#iza`=G4x2Ya2|ZSG7;zamvi>g4$9EdZnW$L%Clql~9=PUc&+_N#cdgNu9K$Ztb@9uPLo8t6HQdUnOlQG-xV`a7fHVl8;%wjGZso@GVpsq*Wh&y$Z#{hU@ z1ZW9_KUtAKP^R?xt*z{eBiy?P@1?Vp`FQkDEL*%%X+&lGSGH>ZwKZfGXr-}+{Jl-s z26o|d!V~e1reL6TuCK6x>-Zk{Tu{{GR16ZQ&8I_qUpd_iy;S2}vraCpp{r0)Z6#H? zB}KaQL7&TPnQr%udQNCFUin@)syr(kfCW^U4#HU}x~8zKY=7|w&erY^Qe|VZInHm3 z&E7RDa2APe+84VBT++t*LCEyzTYow}_(Eo8T;d-&pU!mhAxGjo45WR^3puiGqJthw z_j29UwE@*c0hCV3vLQZu#*WVUqa8+m6?yPO<&$cde^f`?e?~+=1j7A<-tZ4!0I*At zV%aUb4T#&e1N)m#BQsh|qF`_}U|oY)w%YZ)3KUN6^C z7JjSBTw8FbMa?3+ykGEu;QQ0@19S;=KX1d1JtJJ@1~!|at}0qrKbDsagA97VoLB5r z$)Q&KPRHxi5yo^r%AT1*G_KAokKU4*RV$J(04tY&aeutA4()p%k}4<5(3q@(xiWV3 z>?HpCgM~HSo4#<~^y^=Al85P2OM#Ay?=!(;zhr}f@(6!ds*Ig;i%G>LH^74tKMzmO z^7DSm&Utv!Yn#coy>A_FQ*{T|Nkmh%z;~$&{#I0i`nFh z9l2M%{JI3e4T;_bc_dJ)!P+nAMmGi*x}$KCP~Zy0Er6@CBrBypNhB|tk#U_aV$-IN zAX3??qi%=syUh8D||XWKt%?>Xf7J% zdx^>`so1TGol^80hgor3H)&eH6=$<+x~6RlruZK9^Z?R)wXVB?W0l~9o)l>qy+5Xg z>yQaMHPIY%^vtZHwn@M@!i6QEGY*12Jz0itkOS=ls7S$a$zOJVOx4spM~>r7>oZ8bQA2)eb4n3NOvv;A#C2JqIwrh#PhjC8M@EMsA1vVNnDVL88p#)9Bj zkjUZ~Jtg-gcee^C)i>fSC%#Xiw{EN~^CLJvV=Rsfa6hD78fJ5c`2i~*y>ta1zDp7lC~ z9Y0XBbA__Dt-8hcB~|34Fk^SgBCdw-tr{UG0`w6UP|ReO_5k&uSAi*z=&f!Y9_M6| z)1hR@hZZO#Cz_!o*)%X)^(-=!!eC5d`#9OqFhz0UzV(JN-=kED_%kC5c6iU74Su!@ zKvvV0B(@2!W1A}r*|A}CaB)axJP5-KO#Jj;0lmQ9I@I;cNnsd?VX86 z+PxXkTYt) z{03E^L%`34Ode5ws~zB>`x-FW!-8GJ)eOb9dMfZ!g`TVy9)vGXz#S)`#}9wNOTint zvhDQ<8T@iOtt_h6I`ezEr6>S!%Ay&x2Zm1@*5NuJDBTslM#p|b^QuCP=KAx2px|>6 zq>y`Qj3hbRCc(Biw)XZU-&YZT=Z}$LLb7z$S%02cT7i_S9M&j9KRt*tXM73_BYg3z z-8W~odw#^|MV#mJWB2*`^x3jS&0lu;?1Y+X%$NA~;|B04@E;kXJGk7*TVhAbNV&7(?n!pB8x+CD+v_#eTl>jjzRe*~*LDHMnw|IK$cYGF1Z z%b^(jk6z`Zg%V5pAI1vI4~10fzX9bS$}+@%1JH34wV(eDG%ry~|F;gWI1TEg6@MWX*@PW({8|F`BU0##h~JCn+}iOL1gS#!pda`t=DNZP^r6}UbB(aTv? zsAVIZvGU+}zI=TyqE{DA2x@8TA%bcmjPi*KSoV(q;{H{aH0KWuePC0t$iMX4|x z&I2Y}()7lSJG9j{0D^6L?sfv!J8KXzk((mHWaJM$%#gT+v8cg6(vzkC)?toNM@*Hj zK25LpR(vV}E6!8tb;s4G8$U7a%k8x`UlI9x6Q);|@BpQA1o}g8*k8<4AKZm)~29Zp>@v7PV#7U|hK763rnK?ZY}l$x*du5X0m%|b?SBEqC+YIbU< z7GdyQdYdi$Ho*Z`GD9fWLdJ$(U6-`;MjRgCmxak;w$Y#bA3Dq3DOrx}m8>A#Ohws7 z`bT8SEHP#liHX9^g}1IcsBw_SA1E1ZSS*Ikn30I^hPvicNuU<+oC(x2$xfrM+klpR z!l-CoW+&YG!}mzt5?7&3H9HS{vv=7f0^M}tf|0m7cU9U9)CXR%p{RJo;99BIb7tpf ztI%57TMCBLJ&sydyIqk)>HYTx&4)O~d6Ldy_!gnDVH9sn5gN)waK}UzHEQV7?z~^? z5r1f^hJChti95;5^!p$p5Vk8(wE%sTsHvTH%$KW3Lw=-_<`{hUG5D2Sy~{kQr9zon z&{-nV{FG9^K?5-5>jeFB#%bF|MroZ@N?JRJVSKgKZ7d@UC{caUXo&G*fqgP?n%z!g z2k9woP|WWTTS zU$-gif@^ALYa)*ZQx4lMPcm)-_svADQyU_1VUWuAy;StPw`w=tB=YzyP?p7}hx*h6 zf);yhMKj#{!jdHB@HyCZi}!5!)VEjAndHcp8Ld{aCSuummAO@>BXf&%e&M)&^5sl})sTf9(EnQ7U%cXB3Wu zpagidW~iQpTWwMjm76U@o4*1?<-fXt+%DK`QIRCeTJqgqyI?y64d4E3ECU5hbV}te z$mPhvEG54;wr3Mxvi|nybm?x!F9JjzbnlP5w-(;u%(@Ar)F!99TS;Z+;pktMSjxL; z1abC$h$FnhD=&PkISHl%L5o7iNpgAypH0OsTKmCu6Ku#zU7%n11>0k8orBKD5m?jxl;D0 z7%fL#-X9~JWdO0jHW6IX9B_Q>#-=6@(>8IWd_!AA*uk@xT;KPArf+);rTYlVX-?TZ zcec`vtU3{)i|mFTEy5tMo|;)@mWU`dQq4=z6kR4#Fq1jv*CEJc4&8^Cjtc>z$9emA zaDfXV_h~iXfWO1ZFq(uW^dvQd9?E#23KOWrRy0gwc9N97%#<`)G6->j-{)ptAFS@u6-Roe~j@; z0$ctgHC`Lz4w^{bJ(zbte1ZRk_qPAfeo@yq?=fc|p`gL6)Adw!Tk2&yC{k&rl1}5N zDP}Mzw>p}_V<^wBMgy`1*}Gw?10q|=Uy@X^zJTJNNyG74r{lpMy)yHp@+5kW!K}e_ zFyuvj{aCE@^DxSMKO|m}V=nowxk}xu`i+6VF%~tBjD-kgznY)vc%Z~3_qF6qcJXZp z1_22yJfH5vR6aLr)VXU$_@Z;V56HF&O7V4mxmxIM6b)B1Q}u$&^2WqCh~Mw!AO z;^JWjP>97{lk#o7O|61@UZ<7&UQETj`2cEIt?w-&h@!a7KU?$}&J;qJVV&yV&Lo7b zp5t8Fl0?Qf9M{53*vDB=!yMPG2}(=SA^^Y}#KH+W?*p>an~|dNn9p@My9CK6s%{C9 z9m6d??W59gEh>2M6xJ#_Iplx!;ufGkAuF952$`K&P|`?6uSM&>^*3`sGgD>UVDtFy z`BPJLR^-~GdZXNdqD<(FeDuCU`LN~SRl-R$5tdIhYz;k!&C9(yAS=icvyPGFQ0DJ$h839 z(7fe~Q$avj=kCE*o5YOHAd?(PE(DBflg0O=-$})wCnt)G5F!>qB|UTH7o%Ol2w|cp z8tQdZEl^A8me&#e`Ff`Fl$4xSE7)OweK9J58v;XRkiBnIh~d*+%opnJ7oIIQl}Ub(&K(v~ z4ucJ+8LRXs$=18lM zrxYkvoYLL?#{BYg=PP`K?-$^4Xz9sEhSAM%U+CzeCmw50ZFsf~8*PHx+zgqQ8iEZx zh!l3z^+Z#kgj9S=D^UrMrFNATgcqt#8{;|8ZxrVUmvAF0HX?;M#y{qWlg^nqN4vQ} zcO{)j$w2IH+16%qF{xp;KK0S;0!PSRv~3hC5#47Njy0BpJaulU@EZVS-QgwiYzCirb)Xy^^krd0M%S>KZG ziEAteZscM=dQqb-g~T_e=48#}k8}H9s#sl4+AY0%VF8UZRm6jOQ>`ua0=4_ErIb8h z$8Tw@?6F81NQ8WkYXyL=KR{A4M_9BIDoDwq(zrEPJByC8>J1^p*}Ckdv7z~Hfe7Fw zbL+lga5Ln7@Kn-Xj30*|+a15nv+814bP^{}oe~=(d@Lnn{8BTDVeKgyt|cq|Qxstl zWN{Z01&3TNEl{P*t43P`H{{7h*ipD3i;q9u`?fc`W($RDu^K=z)*ls=Ma`;g_)n*> zQE-$Q6%^}!zt7pMytBi@8*pDBaC^rth?MyDbX>Iow|NEmKtFj_jl>I_;*K66A_{mG zU!|Sa#BjlMo1N6LgNK5_sh?c6k?ug28X56<8c^uE2=?=F>iSVvDRV^BDwh5FN8$En z>cN^T!?zbV+4ft>3o>wkw{?Hya4j5UHfg?gp}q^0APgHbSn8^Bz*LjTA3_Ns5b*OM zEU9Kw|NOC8*81ryjS-&-`#}l4rgLirY9<2auji2Q${9`|9pk3)4`ts>5$^+)5_qz8 zhuHd-o#`H=a8(iwY|ZsF2&Ok|>9KiY65o3gQ%K*<00;Q0bm6$pDExbZvBG+APnVt| zTD)jn(doR+tw=WTw~-f!ZaUleSN=5CGf2(VWxpX+I&tI zOfLU}Qpdl2%|(k6U(veu6MC5#S_VhOA=Cd1jMC9u$9~yk>Aj52`8o;RFzKiOx%?cuRO@Spp;mP)j+&`e71Y#+cbR1 zfR7%bsxotZy>M!u~DbFr;!^rUcOKBE^6FKK*_BSVpnsdndwvvNWkH>~~H{ zNq?KyPOx$!UnAn|>3X8po%T!NFzD=jSZn$yaZsgk1&ivKRhGLbnl%7Cw+i!IdkDN@ z@G_6BROE6O?3#ZXL``wO?38c06TR`bC5Q0^-i{|KR|a zPEdJMV_V4(0Ltl|ci>y+6lukU^Xh&97D2>aCg`tJM=__|zNSGkXh2UEK za0%`zHdj(++KbxF9hy%MCjxjX0z?kq27Z9+-G#Lu4yd;9oRhubLZ>f@em-!_Ay>rQFXnLl0Je=;IC_rM{Mm>16LI+BoYYk6aHV{P5PwdGCJS1$X$ zD&pQedv%m?V{_f#_;r?V?FK)#FDl~e$pmvy$P)#URlt~0;QZ3|iU4?*bf>8p1NO-I z)yoJ8xTx*R`aGtS>befdE*c3w*gN1hsx~)xj?;_jn@Qs*dPBQ$`l353dvAZAjL3~n z$oi1Z{a7#&2*%T58Uw@0cGE5o+>RqoUnkOg*~bM zcL;CYcf3(kE4DP^1Be3-`Bd*48LJ+8@J3yLo>amj-h;1<5UsSkbMCjbiY{Pwb{@98 zpp9Nsn0gqdM}jH0%!}kZecQGb1*YSJ^FQM=D=ZVg#cdf6-beezPbP+Rnn0><;EB``mK6H4I41>dB<4-UC;8)4bp4W8VzB!3=& zaa+TP!b8l-bF!ChjHn8Ke)8~f@^JEV_OE**y|@}*r4ijTb=b*VSxo=VSk4;IP;?Fg z6Wb*4PpWlBc>0$5Rb+B-hGEIi``;3%@iadWg==Z=$T|pN=iwqTe4adlQAjs&akzO& zDf$od5cY?b&TUg>e;C`aOtAKhTlSX#A{PR3Uw~9o=Sbu7XaNNflHgUjQ_A{K_7Ih^ zgk`{wV-&n;eFd_DS7Zw$tHf*C-`9cmf>1kX23~VCenwBSV!;gn?t=dtvAHe>vIo1&-^tAt3o z%#tOrec-wRdH9S0VJDBL=DA0PLF*;UO&B#nTOPR5jU6j<2@Vz!@^O0Xi9^BlAKduP zch(mXma!6`FFW?X)?<&1bxUKF_s2Dd$FOlv`i*+u!0Bqv&hsIQ_JKvf^|eXqz!KE` z;}x&JA!8%%RXV%tMVThtp=&3Mfcq2W<2>#r<*iu7Kza3oO_TN4x%QuvjQKBE>+}6W z;dj8m*GlY?rxaWMS6A2U*D?EhGQvq%URJEZLI1Lgaqwj^Yc2T~#udP%Yj(|GU_L7g zI;ZjYW+Z~|*J877ZrU!u;9+}-epiu&ViRo4G`NOh{hfw7Cu^DpMW!F?qh783#ceDH z5B&bTjJW0z$%(QqUeO3iD=to*hB2KN=KZWo)1@X1M0aevGpu`ylKFV*5$hla<$YCu zsUtMOx!~;CaXE~zk z%DYaOqYsqACg+q}0#0OK(S@nvjnYMdUGY8yg)c#=@B^`@dIMz(R$AhARsiSK&7qvu z*i3FViQVO!4JP-k5twq8RN$7(1H>Z~+Un7TahZHKEjQ=$Z+tjI)Ui`uY&Ry1cyB_^ zW&En8ny(Iz9RvUe4}_rGb~{cssef%ehwCvf$1*7f625#d7Q#cnZB@T6`Xv`4BB&4M z$Vk7jiqyal?&nsNb6b{4msZ|dGa<( zHu}2WVSYEKM_AE^7%FSf#I0VU2amJ5F5%5fA%nh&@K5?jZwET|(m$}R>fMR|AUHbB? z%MaaqOKJbeLW&1;9N8zkU-N?9^;Tx!NzU0{z8sH9Nsdk<v!yL`L31=)7Us z(;px|$NA@{;VmI2_v3<5=lwt@RM>N~(Y%V(xyWT~Cw|E%bg|`L)gt;{w?Yt-*XW0o z`ZCkxJJpX;&Ja`|UB7j3?tp4LFoMUeRd8yW97vETLJ?tXvD@}SoB1(Me&m3DFQz-y z^`VhLYhI1U_iQtUi~z_Q8o9qc{OC<1Ga3N?)UFrm8VUvCzTn)L!5xUN&8cSvbbobC zlm^OM$S9o#8ikC&0E&+~^h(&>S`dx59ZtTFQPwrI9aX)E`@Y)Ts+9=y z5_Qh!>q0bN&slJySuJ?mp3poyy18Zmwt|IM?Kx2uFiWAGsj*}Y0hzZ}U1||OWe70# zZSdSi-PI~Jt}g`z7KU15Gfm8%gX_-uAGD^fk)cYzH<_*SpZ6nKrJR+VqCYwN@ZX}m zl)$gl)Z2RKak-h0dJcY2xRpAEQFL6x@2b57X{Daj5ANaZcuFbL$7efEm=PxDItK*d zvqgt32K(?zlFUK^wY{*@nLX=7bwJSY8MD}{lnjcpN*=UQVMqR}z~f-$Bthw7Gp2m8 zREA7N3gzO@Tm8ba?`qO8?_(cOoYw|+k*XxDq}Db`mO{99xIOhW`UCkNi5_x%;_aW2}8t3x`VWVD8B|8?3}=ls>%MM3GfK+zWl|J6l08#|zOL z(2xj9RCFtn{X+s9PD+8H+8YizjMs;}xdNV}7bN>G{ZAA2=~@^B3T26~;g0`!VDMk$ zzpH$xMnXK$>V`%vV2r`YMS!{qH(_4tY0}9AR==ckC$K*zLN#E2e$II2g>rgA8$x7_ zlM!=|^M+s+$weAiW8?6G?+dY2OVui8t;{MXP?jMpbhzYnq4-W$6IV^+Qw}8a%&=$j zbqBGxKcF+$h!0o|=xik>;tSDGt%S#&LRFdJcJML0v)wC%gtoUxl>tVRv?|cNDj1-% zJ;qKL6OvA`mq~GxGDYdW*biRlqE`;m#(Zz_(tsAQU;^Og6FK*xOgihcU`qNUZb8UP z=Y|eoRNfFY&BjRN<`TYdN9*Si4jOG?#Be-Eis4F5lM1wtTT!zYCBpJMVp4%P8@VLu z&%gWNNeBqcogCiK!~l)GzrWj1A-cij#$8ONBpjSGR(!fJ1!u{Q3bLTY)B^+Jp1f;* zd`MP-fKi#J`lAWXB;D;xzGE>v?V##-M@ONj3>+8H%gSbE!=}qd)JP`~l!}3vgURt} z0P`^aZcDNr7XdvLB^#g>EWuiRVO~rW$5r#BVdTn<%Yz!yHIgmQ?GSptd5gqu7=(h1h52LQ0~7wWV|4LNC04jH*hCU=Yc4(El(<_Ad=Qs z8XPl=+zp#}Ur7=mXbb@wEGY8BVlI+jk2}u#eZ5m8R|7A$#-z8^iCUK*R8_b9?UNLk zb+rNqn`2A_V#C(!VnnVApGOksA&NTHzOb4k0N|83kWPU@mWYL8OtPM`{bB&-BYb4^ z8sZ^I0icpIB8Y3SG-*~cg7LvW_fQdWl9pT&P&s#CP^Mg?atWZ8o-jQhCvwt?T(m#| zl_WyEl5iFj21^l_iM(O3S+cnd7-?w2Al~$|si_nLOBU{2HsL-nV+w@nUqebq{gi%d zgeqxJ4(o%vS&-e7_O1qNg)~(I8G=b?`}6&H0(6nhRh(e(LrC-fkiM!t)dr?@;oUap z*`F>j3x2+1gXVBdi|Bc-l4*|sP!ER*2d#iUVlU?+i*DZxYPoZb)1vh<{Z-QF7nMyovGH89H&;>slQ9Ibbx(x|4PDXTw z0V@1srYSMc+omRG!U5_7?___nYOB#p2kV6)lLbTEx#XjGymY~Z&1W#ucg;g<$FwOTjXyHav!!5gI8`mg1%M^v zT2tvf&j7=74`yErRB;~^IcVxM{+;vPl|BaW949|I#s`D`D(Kj#cIdp!S1yy@=cH0j zrkLAZENfY4FMMxfnUWgKCmZU*4^xV}^$b`~P75>GOvZRrmKWQ97QBwV2H7*Wy9d`` z%!f7ugOrov;EknjadJ#D-Mncl02plHxATiPAHy(R{GnM+JVs!;pe48Lreozi&x{Mf|!t6s1q%O8{@?siN??_)k!YbrPEA1_j|93Ke&64l2@~s9A#Mn&glfa zbjtiR6es7GNUnvef1?_#Ags51Tn)=pU_`Q#bn(gBg+|kR^6BmRxV&-b0&u>sIpBOv zgRgyXOkcgZCrCc(1a$MzRuMnfqamyEuCmVIf%Dtpft86_pCLb^hjzmWnDtmKsLvy! z@`ubh1*#}maeyc-9p7)G6T^ZQ@f`{@gpQ<;2IO8=M}zq9P3_KThUYwicE>n5CA*qm z4ZMG7D80fcC&Y14VV-=H0!%b+gY_s*umt4H>-5?@#oN+Dv^e%S>m?oNpRrnhXZ5;8 zqQU6Wq=l5b-%0&SK8LEhY*olj&&{zI#;_pT(=qfpc=ogwkp$G;k|AM;_yxZk*EkTZ zud$q8omYkUac4ipeGQGi91|Y>YMsFs$;t*IXh%4F3VuE2>?y%rk^7UxF-gVx1|tnc zAvy77{ox+2ReZZlOugtKpb-rZCg?I0@a0VfeM3b9j4JNI+7tim*Rw;?Zhml07IW)U zbGywi)h1fO<|EVjn<89!nL92xP5x_O?mj~ft=v(_VmS8aBj+jJgG@t!>fuNiG8H+o zO)o@G0RANDjTIr&7u^zjNiP>2K;V(pPHekJ(Tp@Hcg!@;_cb!X4_>7XEoG+@QPrug&qf+TX$q;#Y z^vtor2T%_vOU@_LKls69{-9njdkL}r-KzvJq-#?N2inoSAt;?ED|&=6xpUEpzAPVwmTP#FN#XVJu^|3a=Qi^yR&dPs3sI5$j4qBvn**BE}I(3m_oBFRzS@9L#V4 z5Md;`>5qxT35jc`sVYXb{IA+o(5(aHscCG1<4MT$Oy{vT&dXvDJBW z{yWaJl%HKMty)FtoViVslyp2AwWw+15Y+43Fz9ayE4Bb+`c%t8CyNgp5Z8;3lOh z6`nYiPwV%N@G2vhuH*>)#!qEeqjavmQgjmss`C*tOV^KkCDUTYKEsB_sMV@ly@9|2 zXR$F?Ca|lXzH+;BvEtQ<#AsPq`ISW>^v^YcgO}yZ!K1Wjcp%f_5ZZX>wfbOz$>L7W zawels9knoohvLwL5&q#WCN!%);AGaL3_QQHGDwmf2bzGH46K47!v;Lz{;OqeyL1zzb6oUJDS@JbV?v3t0G4_a1HO?yKax<2QOqV1gf_+JRRI&$%0CG7`j2sqfn;O}hg2Td$uzy}!Z&mU#h1FZ zpne1fcq1Se8+ouT@)W7#8Pgr|?GnLVAh(v?crz_9C=bjqu&X5mn=KUU%k){MjK)|% zY*V$gt%AYXwFP7R$y>@_2PiYb?LdJhhtwPmjmXJVdkJ-TpEhRY?dYcaaMfE(mPst2 zx+E8l8i$0r9GvIz`PBTuTH*3&Ab{^U9CAl@B04RyF|Z%}uH;?`e>1X(73*h%%TKw) zn$SO`Vr3v-=|FxY8JzI1>`$tDf|{Q-qIq=bd&lSeVBXF) zfWzIimr(Z|Or)0UeJrFXQ%)Sy#NlEbG!sAH-~u&Gcipg|n9wXi`hTLS`XQKuMf-o} z{^k1rP7nA&jM;)*lWMSM`*#QFk1al>P@v0i_b;veT@zj>?WD`So^um2Z)m&HDGEko z8P+Q$q6;5yXp>TN0QJ#M@V6g$JP}F}Kkgl!5+(J@6kom@oqtNgACb*^zob58V7o_M z4$5@%82@Qr*k8y}Ih2Hv*UnWK$$|6Xcj^U*Um|!jUnH%^R9WoG)p&6i+?HdDKimS>f_X;!KH&uJYx_|ltMj} z)gj}zL_X-i%b$Ng77 z&ksg2_Y+DO2S9_o16>_L`+jXq)3(8zmFIeOe?W3g+w3O}IR(w1q1{yY3*%#kPZ_7R zCsxZRB6)((T=G|8Tsf+=m!?TxS{Tf8KCbKxBK-Kq2XnBm9t^`}aibFn9FKjt@P?xOaY^syiQEhJXuVyX(pH_e1$FmhUFNzMmSXI!Y}9;$>|(f-b$HRfPWvjL zJZvm_4DgG9_P0oopRH)@4N`K$L?W?JKYHcW#O$Clp-%X34pGt8;%bu9$r)YrP|_lB z#@!n)e)ar*$zugcvKUs!S(_X4Pin6LVEo)a_{SxuU*40=8XE2%XRG^@N6I@JJS&3Q z#awWC+ItB7ry%>;Gd1)PU^b0&EHT?1u2CgkO@QdVDE0*_@4^LLZUUP(dtQpe00zOy z8W~0&&IZ)>RCYXN#_9xorB})+B?}j49(`>O*vhE^Qu(=9~w}swHNVZIo9^T$e zcICA&WH(0rz<*vTM(`=(H7R`2%(m5AkbGy%=UiFgZ&NTm*Yje(8H9qKUCNjeD2hErK2i-h{QZbWqVl?X?Qq7#K@ z91YTOEY9D+wM~cnahU1*;i+COLDMXYNr1Lr1!ijYg}bhlOx?uR%Y#`0qf(DHv-8Wce_HgQHv@ib725F6p++BWM<@rgr4S+?s58?h>l+K-SNI z$pkb{hDqg~)m~U*RtOO)NB-C2ym<*sc=ZXibS4{cn>N7Sm5-S@U-7-Ugjmfd+Fr}V4R)rq8Ql7X;zWCgLN}}$&O5;o!w5G>DOx;7h%0n zPjs6g!>7gB-v!G^Wd^CE)l>1p_%S=aEpWqZY#XsIQ} z8fW>7c}Xhu=vrJH-X&zvE*H;LW)LGpAE^Q|D-2Y5Z$M z)HNYHr0$NFwF*PI0<}}O09)W3*^99P0exG=uZze$l{GDaR&-_jHS<&x!U~FfRGTC` zdEGFP6!P+q@=G;Z#8cbeB~yb8Z1IYyBNG7)?y^9F-E`ymGDgQib0d@$Mw zbAmbDS#xDpY6@uu%8dgNW2QpcBF4JrKzuMUIP-!;1d6*rZgx6(z-~jbrW{=m&d6i% zwyjC>D;?iBo2z$X=qOp~T&@*hg>_zzRuheU*u2Pr&97zr8rfJx&%t<<&x z6*vNZUTv(s-?*9pI)v}dLb!-2gZyOfNWa?jycnA}KRlgLtF!-HP>x0QP6jk^hnpv+ zCT6N;wDO_~Q%h14Asz6>7v6s~H2Xmzh1sq!>~(PQ@I0R^O!OwEYqbwj%=*ob2PO91 z2c3&vDRr^0gtA3KIk#@!(iK#Z+mN=w*94bPZdsmi#CCoFGP2Ei{*Bg{quSYwhW4$? zjY0Jhf~Z6|h{!?$BXm#`dn$L<&=PxOclrBGYj$6)nOm4RHtA@_B5{-H@GMqv#;qac zsdb@CNLO%VovN4$F@;#wUWDvhYjaQXg$qnsipcbwtgA0t&WkzHA`)cmY8p^KYf#Vi zWHFNrVBmm&MdhywcI7Wx-P5M2pi7dA7xA*M1@E%1XQfO!OpuD`jg-NU{%6uKHB&xStYmj|E^aiz zj#5sF5CZRkpWP`WZ*(U-BDj5A$!u;GkZc;uv_zVlZ27*Wyc5=kR$bf+i`K(4xa|AT z8Y1T^)&IeH$5u;2@!8cx_It9vsA9xS{Q7Ht898CiNvzjZ_$*3X@1H*2qrAbNRy_bv z-hyp(iF#P7L3!xIx-*Lrdeua=KwR?6+`x-A%JgUAi4zZ^oWm>f10vTGy!&lw9_!H& zOAiRo!uwAG+bcqS0t+&UtTuzgP>QRzEAWNPiaZGo! z$DXlG;}fG5825iC)s#2Go1Uf5(8&!f4KL#4_Wau=v;IuIp%O7pB1o*zn4AX`U%+Lt zKlP^2F1BbYw=5b_sPb;icQ#-Qv38#gg^b5C{&ceG*UiC+*(u36o=u{3_TP=2Jv=I zkLGcoa2Xs~DJyh|Q10??c)+$OAind@()b3g>*cx2V8*0gx;eLI&B7^cz+F(&lUFpg zImFq&zka|MzQCiV4w`JZJ6Zy1xx>d|0|CgA&g|WsnzV?6UUr_FU5j@>f0HxLvd*>p z>SQeIW3c@NqNepBYbqw;X~Q&a9dI+jSn?18?OgpFG1hm?rs6p583cG_+t>%&`!B%T zitqMa@PSxp51ci!YRbgL^!A6WOY+eWD*ppC)Ou31; zOmvIl!~MADl7mtE%M>6vNtLWJ7%?D2NbA$J5#vXgx{L64A6vbMQt*pXVOerA=9HF)uBS&d%r@LC* z-8){+S^c#0x!_ivOoSh2En0ssa*F-PKpe7}D|8Vf@kvT}ISVjKEN)fMnzFELR^-DIih6bCOb_JR~K22W*Q8Oc2-s zb3r#yvt`l^0{I(&FEEn~&<(ImFoSNO#!ABNV6FzJse#l0y!9oh2Dr7d>{$(P>wl?} zK&pbamePfMPPra0wbp+v54?;8(kUNtl2h6TpG>JiAyS{U2Z(j+bUD{w^ub=Qzf?ci zg8l+#g;idPg_KW{3tk%xve&?zFvFBCZ8iuQ+}mu@t3^THK6?xpw6mWGXyD-18xz-1 z+BoXk@_p=g{3BvUr)AY-mLU|fb#M9M=DX4A;O z=Ig3m7<<&&v$%goDK<8)vIeAT>HLo&BGp1FKeEbTZ2u#6D6WTuEcD9KGZJfhD%3$; z@_|x9fCcTOc6KWrQS_)wQ%{jtDz-VHgx=KiQV6n~OP&P&nksv(bWBmq0b3iZqrI43 zs{Otp?TEqZyiS@gOvQ7Iw-LhqkD=~2_<)JGf9LT7S$%)Oo)>3joZME2(q6DXDR{zo zagWp|USyAxFe`1i3b@63X6!ndv9W)l_p#&>W7Jti|5mbAcnKeR6MtIC>$>vtMD4-B z!+B*5dp4b8J~i!s5EP93m>mijkePB~CjUaQ_<(TQek_)mPWNIW7XFT0YG6eBBlbhe zxprO94JLnpT&$ifU?kJS^gU;PvDrtuqmYipyVouF8qfJv*q|tYi3b=Y=YakFH7^mH z-b=_v`ut$w?Dhx9K6>4rL~l|d+;`=OY&O}v(%o@UefX5~m}Rq(kQcMFSrlEX;!*ZT zshj>PCPI!fqV$%iKt-wVh)GcOvb2ayH<~?Dy~%%uZS+{Fq}9Hlp%2Q8(SCcZ%wgpR zp`wsjbE=_5OJYLC(Q8A}P_Cj&>4T{TA-P)5F}cDmK)#SGm?|B%HlL-%t}FH+XdfDH zPog&v1e=^#f#AFXC@GBgXb3hz0Vbn;G^~%^o}=EN5R08RLZQscb3#EdyuOBlKZTn1i2Q6AJ1dd(cDMo!ArV z67=BF_lA2|6uJ@jX0bc+;X&wgo<3+gtWeldSq$dH70_L!e|6~0X2EP4T|XJ0QvY&gKXJlMQU$&F_do`xeoVo4hCbSVB) z9{g0cQHYaT{;u3l_AG<3-}Z!1&@*{N=_IY`t6^fHH)z9xyN%FBLzWKUwT@32gqVM^ zRUs|_JmO*BDg>82YLy7wqI?Y$hYNP?(64!b=BnvgTgt}76J8#}o>uojiAP>n_Ud7* ze<-^cK)o7ZkM7o%AW4jft96u2CVm{)Q->Y3k67hIh^OCv+ix!p zc`k{yoKMuZ6+DJQ2iWPOp+=RJ+Gc2(P z77xwVvSoFGfT8vfCD?vvI5VB@p%06xhN2!(8S!-(2TF&?*kzcHrO+oEx3Mq$`cg=V z_R^nykBioYGOP#2oCQ7h^1qbxolK?_A?ly|VGQ^{;bs{{YluvNnwS#;u}pu?5VyaE z&|Vn!@+#I0!zizwiEY|MUL6*Hpcf9g3&B1aoyezHCyixu!jF@Q=glnyEJ_k_;AIA+ z$Bq+nBdc9CqzEF_DNkA(@+3&qJF3iT&wne`A*C%*GEsKzmOqj9s@_ehKC6DH<+BV6 zya5_*;I}!@aRZ>?+Qm3eq$PiW&84a1F&Ddp&`@rvh3i9~z2{1{Do!G@6s`8)SV038 zH_cKnAn`hM-{@X5aO}rXiKTf}DFj~;xGPbx$kaJ0@N(wjfL~P$)DxeceERNe;Iez2 zGq@|PahF@9g&epfzA`Cc1e*;$m-cJJ|)&sKQJuZLb-d{x4##O3~ zyf`IeFUnEJ(pVlOJd3rI#4^rh<5+4Z8dJ1DJ{lLmhe{%Ny9;DT^ib8@IVDD;5Hgn# z0s`}BpWXt{=s{|{|#} zZxlG)-9X&>ezK;}N@{<3*=MGQ{Bje0*@p!%Ti;$P^~|E3HT9v zahm0+Kgu&Hca3>86%ymwEFQ_y4E3aa*#b}pHV_7vp92c~*&CRV%68V6R8QikYXvGk z+%g)O>NJ5{O2^P1Z8?7)!Jq=P(<7}MCA%(NLY0wU*>CiATBy--Tzg@5O!zt=I9XS@)I3S8 zbh?yBq>2!-uiG`y+0MPW8olfr+kqMDRhsi|pS5Eml{n;x*ypy}kGhqvl5&KVsbpZ{H^A0pfp04?Ww!Ty@r7-B&OZUB66a zUy+&au@MEBf6nGUnCj65#@c?Ck(rJ)R<&Ga_VLrTX8$5mY3rqW)3XP_E9if9u7Iz; z_^gXXy45bS?U?$JkY{^YgiLzVlxLi>;`}I5mC@80V7|5^ukH5IhK-->)`EU<{*-|_ zjK@3;^P+z@O_(Vw?pIe}wwP&cq}JHiTe;cOB#F2mvoJfj3XxEP9-P*YPy*G_MN37z zpT$}2{HXeyS*hpIgW_7VXA7-_IN;}umbKVa@?g=Y{34$$brP^q>dO^8L8Shvgv)SXZovDFQu;+lUlCPdrmjDjSYU&i7m>BP6se?Z+2 zKru;3JzGR4J=$~@-;i@qEFMxKwcS1l_JJw8>)Rld0%~F3yBAd36;!QaR@x9$+mw=9 zw#Ky~s@A3C532ci@3AT$!&?ebaR|?`M(6evl6C`FS`t=!kVb2<8Vd+3{q7a*dyh~*x~`*+jp(|L>h)6R zMTdrqj%s%&O&}dr@g<%}T2bHaz?8j`-lBovE^6;R=;I3pg37(nhIs%Ijj0AeUhaRV zuTfjC%<`Z<+FMZ2=ftZOD&Wa?Q`TG2m-|Y@zO#C{gE9;GyL(e+;aEP3PAwJ1)=FpL zIUf~$?dIC9wGQuq$lPPyNP88&R~@}95_Fsh1g>J;o1%_P1&5tV2HETIJ!t1k_L7uO zk_$dqxCDA@Bv`easA}_X#CHzdIDvm7nCHe5Rg%B#EuouD$V~$<1mP)Q;jl)=w#^TF z&CL&$=$U)t!@cpLJ0n0V^(ZiXvWFtZol~&BVrt4{HAb!lRnjHks=^A?Z3QpXW>9MK zbcX0OJzXSsHuMzNX|Mp)zH}PA0^3|EN!h20eDQ`cvnt^bn`gwp_iwKS3#1zxC5E_j2{UTx})f{)s}39{Zqzzw8LIJA^iL8YUyAD_#h(hs?x&$7YE#?Hyckh#qU zjCXUTQ%(tSfza>C^B)7d3h+5Rp=LNIco*FzQ)l@|bouPj_S$7J!^HP8QTdE2%kvtA3{I%@CS|%p; zE$h$u`YNP-q;su=buvrK_HG#yYsCc^ zec4kx6F^y@O+#~E$#5;OyLFmHdCWX)6iSF3?Y8&~V{W!mr>eY&~( zwCiisFy?NqQ3Ij2u2Fw!qUq^q97cg!2!Y@N*TaeU=85JznYL8?;B}FIidno&3DIO+EpAr*`6&31x zn1@mWxeW6$i<45<|BCex!;Z!-j(fet#=K_&lHL>$K>l|(?HNYAP6RMZz|LkpE&JE3 zd2H-w)f2B&f*uu<>OEhzJCZ=+&)M|Pa(YhQ37(D8P#w&G#|h!q>9zQ*5&^cfBoKei zF4oBa=8@bhG&hR@+2~#b_)0{8_*w-tm;`|GkbUJcKxI4M-~avG|5XI}`tSbAXz#$i zPdfhm&My!7oxAqucl`Y3*UEjxFtJt02U`^*fcKT%`}P~x8XMadExtoUi@&SJGxySk zaZx*vF7{iIF5dHL$}{n!kTBRJ%(8z`9Q^sEBesC>2z$etUcC-@F=sH^Ir{u$IG}fsq_ZR#h z_<}##5J;Yh#VpSH$%eY*?UDKqbjzD|@1OOiuUe7hEg)|9oGeU+D}NMmKP~k(y69(_ zQ0Bxh{p^dl2)_2~-L!9R>56|pmdipHdZur5u|5-OD@7M_u|#C3xuiwCPG;&h6n~`G zN(u;>_%Y==+&7An%gSG8w|B1#cG*a5O|iYCDPx^A!^}!6){K*re8;O4l^Eq^(pnR? z+PLvou(j*W{V9vAu`Tta8e{=83`eUhFudngYb1`;``DlGI?q`yeo=paB!C&@y`6xS zll-yADECaW9?P$HnpCG&b`{2+cub|mwZ|Grft1ajfj+^)jKzQGf(Jt9N_>4|8*LgiC9k>TI=bYwi+6e&iPYvER%Wem9sy- zZ&!-pLb_AwStM<%E8k{1^7@kARwi&WB|@;|tjOfNV{TxjftKR^?!L-MCq-2No_fSf<1_sZVZIgh${e8f zKu4&tFmE+Rt^L9@W;%aFNAhu5bmU%^`ATFNSzm@E7CK&;EHQsW5{uASXz~Qta)YKTIA0(e-YrpiV z{D)edEwwaTVqJecHsId5wtVhByccd9g&SEUbgR(Pv%cjRN&c%4VZe^1M&j-rOW&RT zF4V7^XVyr%)!0!Z1?xkB+|u^0jG7BtN`bS}j7waiiy~8==&^snwR1B_Vy;xK5l?e* zt{ie2?WGss@^-7ZTS7!B7Rvi`-NpT+Ew^_XUij3OF^qrxsM414bX_agR-_pFK|<0A zveQAa;t@NPW?CUVaH$Z5LOk{35vL75H`@ZjC?*#G1IK*8WsR76mf!rn7DNi^@Kk06 zh%e1~(3h{b-oD*@^{Ou)FrrGh)bB09sM;AvFW|6- z4r^5l!wr9h`+1dWQDJ7Sbh->3jtx^!%YKh*pwUbmQt;M^tp++ROK>I<5HKPT4E7;; z#9og1NJti;LY#TEgp36<0mSN1XH!0sjL52~_JE9aR0RMTYg1AIWM8A2dZVDO2nBmp zE6tMCAh9*{1KX{N5$J-@mt#)BiF0hOFQsyl%He+{DVZ1SIRxV??eQ6Fs;cq%G)W>( zLPd6*1pf74j>t541e2Zns1CGBPM?Z>_3N zSkWgy>1KJN?)||-HW4Q-k%lk5&_W-ZWqC3Yf^ERGct8eM?vKU}a_wGUFuDiBsGa~l zW|@CPbF%U3WP@^IluuJWqY(Q~-~aPDySlpiOuzNd?V0RNPTYeKuTftKqu8+Lf_r-E zE8EjvKYr|rbYgX1eU?UIDUNy-ZoVy+UjDj}7wM_^1AA%laZl3X zvb)CmEQjBl^|oM&&QcKpB~VNmDx4TX(?K;uLaQU<0%_V{rlZWxw$gDl%F4m5v1@|M}I`P)wWn&qHNvx9>9uT7&^S!VJ2&vEAOV+qSXY74c3sJ{{d)Y*$;LVs4jW zEB!`pipnp<$)d*(*Vy6B8>A;;@^R}G#ceIv>nn;Y3%1PGxi?_n@pPwj+DoJ*E3i_k}V4Ht{=D|uKp zfY`HOea-h|$A-+Tpi)vdv&s!MEMnPJiqkdE#aW{y$YQYpyDMhQ=`q~7&!}I}A`S%6 zLgsFbFf>+!oe>eE@S0Xq_Njj^gtna@XtV3Qw`mJ} zg(X8)J{0NRbFrEEg;rjREbjTiey(zMWU42<1FU>~!5nCto@=Onae<2QfBNM!4f+%N zJe2QAO_wu4`l@&;AHY-68`xoi%ynh)oaZ0pzJRnvFv7WFAFD#kUr2v>{DqW9(gVdh zG)QJO@YH@wNi!X5D6=O4nPnjR7;1(7C=-zjL5h;Xu~UPZnAuw)m#aDzLV~M?nG;_s zO03Jkj1M#u>gxDwm-A>24{N`9aWZY&pOQB$`f0j z75vQh7C(R)e5(fpJ|2IV1$f2r$kQ2cIxwR!V9mUXA;0M9us6-N;_)fH9m~?T{Q-Ln z##Gr8a?SHvo`^6WMYCX`f)vTuD~t^GJolFQ^%%lA+zIr=1?}2!0zH8-Pj3flHK?i< zvR=iuA`L^`bh&ET^E;zCKDs@VRCL8gXd-S0+iM%)dDUVQwthfIS422V+dU}WS@6Te>qAXco`8Ti>`Pa!T_kR37 zxkA}#xyHDGLaQE7BL(ZrTTSWN)$=q-awb%x^LQeDQylu^cSpazKm6fGy2dB|)sKHX zJRj$CoY;T1|J}2_oxR6TzuVp0d9r`7xBXOo@*iQ4kJo-ssNiR{Pd?t>mf%AoL-B0Y zI*X49@QSnIbK^XpKHu8X9~WATe!I1^UwriW+12V#6TEKis0Pfy_Q4c1HUFb=7zHVh zQPQyeQIVIx!o(&BgJOCDc@NP_@T-4v!R6<~v&+<<9#@`|n?^j|LfMBCITiaQ5G@WN zn~Lpn6pn<@Lj0YDd3^&vdnPxVcwXCt`tdXzeR&supUmPQTNtS{9i^xj+a3xB>qJodpiGwrE65r=CQy`4o#MI9YBKe&anCCOSEEaDb#%I*R z^4cH?*M1kqH~b-?;)*{cskwjtm)~izd8ItviJ(m4mOc)VZu2WXuRW4;T>mpl)FnF9 zMbep&8V}>?EGO|q9*=((zk2fIsa&Zfelf}`SJO9RKMo@PvGSM8>;HJiy!?B+kL54s z+tpK|l6p|T{%%WrS2s?5qB0%_>UlX+zbp=F#RN`bK1t$mbmWUGetv(M%Sg+%=Xd`* zB|=top%2vU(P1)S+pL<*`DM8w?;pSrbYkE~p>T{xh*Sm^R=YsA*la5W2w7^OMpysLGU2(LZKD`BHr9PxB$C-t* ztTg%gW=A=IylO2e-JpNyu{8(tPPDdXi&|UGv%D7ObSxfx$di>fD`^7*w??j| zn!+#A)W3ccX1P6ad#zxJI!L(Hu3u&n)^MfAW=0VLYJ14A7eVdEiB_eqhP!$cvu1xI zv>VK1p1}_4QX8lsg{f&vr~oE?gRAh*bpc5R>K#;?Hc)XZHC>TZ)`hbgcBy>`l06B? z&HyFFgV~vS$LN2`mwGavKlg*+I3XOR)KUL5l0_cH!+NB&iUO0ph1YJe_Hx*P5HLu~ z{3}h3{gS(6q08Jn63AZ^^Z!y#?z%WIGbeb_jr1C!2kU$EB3XrzT2dqjO5ugFW(K9v zF~7>!<-nUc!=fwotI&nYGa(oXk|DcH(l5jH{Ft;BxPgBly@&;E4U%DbN=;P7uk_qW ziPuZHAH0a7H>9c!Xlj9}!~1HfsgvQ1{wNpfO~D*7D%VxM$-;kgvAs9h4#FL5$E8ZU5A=&ge}-)`d>Ek^U;_MDrys3SF6>`gHt>C57$}FCmuO?reX>6D5kdR zJb%lxOq_p(!J0~~W{zN6-;JS~W?F4afd&!~yaGdMIdIKH0>VcqNgoYAH;XA^N4^pC z7X_6vPCuu#m*lJ_vk-Wbb1O+zj?gGcQ$AXE(Hl%JXvR)RehA5x1{-_n9L&N;l6@g4 z!$c>n*y^I_^aGds;U7XYbr7Dg%zS#4wh!$p6kC5#-_S`Eys2E$gcrwP+)Ztox8K*o56i=vVh~T&{NHKSuCY-HOZ$1uFAY1?Z-Z zs8)Ysm3oLt>LHY;hX9wgYD7C>Bahfm@7SAnKmBml-56zxqSzV(lyZ0fY5vy&6 zHn!U3q}}M$HX<9_4p243<5^=66xnEhq1UV>gywKuBVaiK;u@`yX4zmOM``c4w6_RZ z`-HK?9;lcfS_!nYnaF9BfdWKrRiHp&SWz~WF;|_UN3%2)->RO5g{ELXh~9tt0$?U4 zFwPNDYK-=jX0{X)53ruH+DTsxqf>HYW$(;;XnR80%J|?!v-fm!cl%`H;gGd#s^~se zAGb%<^t?(e-;ix1F`C^+Y+)8Ddr!H&fvIIr`EE@uqV(m>S-2@xBN==|fwXl^NIhst z5h8O5qu^6&6nbMP19K@yh~9sgM^h&LOUaXB5Y{1ZwnPJR8rcVHAY^vCS9Iw3S}&CK zaXP(jP)^lmqkp$@pQp2!{_CCk3p-ssu-NIF^)dYQ;N_3+*t^%SSB_+RbNfl-eZAQb z(^h?{ao;X{>HCAXY$VQO&e>@gvmm5+$0WTb`6$fAq2XDq4V{c%-L!ubR&in6)(cz+ zV$@Am5@4QpazeaJz6frLpRCCmx4G+#8h5o}M#ahGVn&l$PT`!gZ~HXm7hy8XnAm;R zbd8tB@*Jx9d-3x4^g@=iPy9%lgX5PnNr$L0zPl$O`GE^ zi30I$w#3ak`T}*bs*Haa+Z;{h?#t5A$qCgjJ2|1>u+3k@H|Eb{>Vml$l-t$t(UX%$ zg=Nuh;?3&(0-J}g*}?nw@7}*T`1#-s+hGIy*=PbgBU-&p{J3vj0|V0hIQ~?Uq-74kkwvm6Rp;Djl z2AH+CqU(&=EMPd{;(U`qMW&S%XZY3Z3)eM1DjaL=uNjb`V&69pwq{wn zB{t9&k1yD%ufFe(Apm}JH^jeB>;YY-CmWte6M3@1K6fJWiA`@Wel-DFx}*w;bqf(# zo5*-)q4n3^nhf_%>r!wd;Z5$PO-?&$YmPe5erhCzK^uRnvEY?XoUWZF008W%Mj}-= z64f`2^nxMFc{&MWK~q}#l>nBEq}6_Pb1NrFOOScMl%-u*lP)mWGUdNG!l^PzqJW|e6vC-FT%e%63kcf zY;8temePOakvAW!X7*kfa4o*zshsJLKOO!;Nyrl)kjR^0mB6Q}7+(Ic zNtChGZGt~RlI_mo@XDkPIFRl{#4$&`8gHX+R4a3A>*9=tXJ_rsra2(hBxL>HzX&<& zUu+wYtjs~AZQNGofY8;q75TRX;AOKYf6k6xeE3#y@Cvw{%%P#HZYO(Fk2x-M;rn@% zt#+ZT{N|>*jcLBpb+#^hk(#3jius zrS$LHASp#4DUgJn+H#d80fWow?m2zV4E`9wvbmjCS5QvwFXywSD#NlV=d=1XEJm;X z7+sgY{{v<>KQBkG{`9lNq#Ckbt>eZ-QsBdY1lv12) zuDv(ObAwFfj7kAd(J;xgh?z$N2IwAT{Tizqyjl$wGx@;!xQ{OMz z#}`-2k9hto+_l$jMtnU__cVYGG;q_t!|0Bk^U*J7qg+n#`hJ1+#VkFCw?VhM4gD-< zHC8LwqgVWFlyHKNe?2@r{PJ*rwgX+TKIkzLcIiCNqm_oM7(KU)E9XKonxi-t zI-On6D`D|Zyu-Eqt=sMqv$tR!%06K_@E+EHlnBgTY%r z5EefSYiLph>%h_-SRyeas3e7^v`LFrClp|hjb*=-$)Ao1t|>$i3q@G<=^gQ6{LO4R zt^3P*J!DWh^X{Y-FV%CmSe1WCH}F2)z?HT#pc2A*N70Cix=)rO85AN%G+Hnn2C7qbH#ws0h48ga&o0N<>ptsa>2XfI~5M3^^Lpio9;+5MHMkEsi zSIRQs7-UismSY6YJ#)fQz7&FTL-n3JjLQw3URxE{?Hxvc1aBM~?jbVm$ZVi9M6HR8 zmorSuoOxhy^t^e-v9IS9zIpSupJg8h4dU5dL9n;U_&!mf9Vq11QzAi7uW`~Qq<;pi z00lu)m&tVIOD6X7vuIu-N!M#J0kh8Ds!ZlZYf1iv&;=uf2!b>t=|)ogE22F$*>53! zq%#M4>eHxyfi~NB`>GUsHQ=rr|1;g58>YY$34ueNgJC3|m?6?iM)3d~AaTL>Xr-oF z?nYoWqNs2>Z*bgH1dlXu5h|F)+v3BLQ84FKc~j25f|SNL6{HD{>*ZoGubTDgqMSAJ z%@yN|@pr2s{ZZVEIT*u^_Kge~HA3Y`{bu8pHA!lJFa%y1auAx@CZ`G*koq6q&uCol z8?T29OS)1$vzJp6iJf$m28^{Ki(sw8b`3?yRwEkf{mLA@y0BR{v{slb08>;R$d!|q%bA3}&^$Ax)&HwPe;`04`%dSz=OBZKiIK3;WLqh5Ij95# z*yTunZO9V|QPy}Ad)iJ9$PTFO_gx?Tytfv~ijWyoBGQ|ZeI))2#zjHWhU8}?@oAls zryH${@#Q>GUfwk@OHif$!rK}v6-31e7l?xzKVh(~-(i-7^m9yHAUl0a4C-O*+eRkPxFno!kqt^{l zXeBje1Q`e!Wuhts*A`y3$z~@EJKEoEDDEv(6tn^AWRDILM=jsD9h>(oF-b8b_C`+{ z+k28FK)TZz&JtNUOXi=*;RI#!?)S2xoDgrd)4$-n$klwh`D2I^S`*_TrEzvlboMKM zH`#0QL1ylf$)wZKahH?l7PU+{fTCDo>qsS=8uYXFeUq7;f;Mv4ZB zH_2c)5y`k~6(U%FYAGM|>Cb!ix_SL|+dO{EdNV1EhCpsIX6>~$Iq@ikgUkdukf5lu zN5$yWkREc2@#DMZ{*ZorHtuj7_7}c?-kI@x3ZEUd3dXmWxaCW66@76Qr6 zn|XCVWCHD5I_wd<(zp~o)65XzyFdzFQ%{a0-8nfIYH7UPi5k$9HvnsFmWwZc#*OBv zrl9)F8hXb#5XF&K30aX_OGto|AW`fghoqItT%GRCN$R#LIDeW>iWXcwBzx`EJIa1{ zV(hJX+iiw&izgY`(WF@p87Z&C6YVN~P#U~x^$XYBx6A!Q_e_u23+Bgc1|Mv8@&)|9 z8z$FX1&w4+shPFwgjDX*D`CKYYRL^%eax1Vh4obEN7s4V?8@04Ov+S1b+hUf1%8US zXrEu?c~wlI`dE;jE|#HTOGld0oyZdU*oB*A(Ic;%$j{?bN!N&r=b9>B{1_^`++@ zW*=tXZ67Ugc1wa8YhqGJ5Xz^aKVmLtShNwN{$8IIW&1*_)J^9V7H{6XU5$Ia`GaIQ z!pFL3p#E6YQ{ru`Xh5g&eY>1Y*05i%QP9~gzG2%vN7X!M-J+LU3+D_I*p# zO>pG0BKzAC>!$eoMg%{7p7Yg{NA64Ui>AHi1YJ{Auv2bpE`y zNb72&0n6!PeF(yQ*%Zw!MX{Pwi<=g8)2hvSP6uIqrdrOLa*9QNBq?x*RhjSG!_)QM zQ^NG@k?s6go37QDNZYmf49HMXrgrq!K~eTnvAUkFtP-@Fjfr>$$dpRSgpVvR56WgK zwUF3;?6b$K9c!YeP&ZiZU481w_emwGjbQhVG6@XmlHe&iP|g6=C_@*$&tlI) z=|NU`*HAM#^nt+Rpn+b}>=@;}UB7oj$D`9Zf^bS|E;9LlM?~#p%7W*FUbov=GNz-= z3VN4fy3zr$HJ0PLb(Y0lIiJ9vT>H(s&u?}Aa`U|H z=6^|pZ%7o7I=iJ)NVlfkZKh;_1f+K7Y`EpeozoZ#|8e+RAg~#nVMsWxbfd{l8#}yDvAod?z@Q*W;hK z9E;-m`=5&Q^Y4nE-;W+1{`NmmO9u!c6MH`E3IG5Q6f6J$P)h>@6aWYa2mtvbm)buQ zIDdEB#?|ik^D8ELPuHRp2@++?lHCuDY{`vM`LZlINl%oO1rb9MF$k~#s7u?tzx~Vw z00DAHU_TfzPHVQYB#Oe`b9?rlef{ZQTT?e3Z@t*Mo%w<1jAGXd_}1>$&=2_aIo$dj!XKmAL6_jWe90*ynK({%nl9?kAHRV zT>TxH))Oi%cRCIHft&hK2$FnCB{_&Dj`-YocI*5ajl-CSBOXlL&`HLw7v1X*v41-r zCxWT$Z;qY5b6CURlf8oz!Q&ExMPJZ}v!o&3>t~tD` zi1ZJLYgk^JC;58zkHs1_*uQ2LjDPU7hJ{Jw%>tg}Ec`S_6|tS0+^qae^^2_1F zB+zgCOlQ-GbKq85K1+Qgv|)S6@N^@Jt$6wz7iu?@ff5yt(kKePH*Tt?Tgt$M5t;Uy zuF)z{&^MyVUc}4O=bEkg(p$xV2&mB49a2lwGo#sCbU2&Nc-_!YMf?@Qh zHbpJ@O2*Os`NM!uC1@oqjc1%ruqmdf>CB0}78}n^<@C*h0GYfd$A7*&%vY}1_vjFt zfI*qqRq75tUB~VKrq~217AS_E8+%u2%-u<$U=Q6O0jM{H5<0FvX@VT|$3ATW9rUL* zL5h-@0sy0@l&i`9zSi^n@RgvFI0;XCH(TE96L-$UKQ~*ekzA?U{exxtl)K9s`j_r3 z6qk<};(>C*sc`UCD1RKq&0~=fIv?Gr5>Go(C7w1x2yM3d&W(|sNwJW~RdM6N*uUd1 z-Go=yCFJ*Vd;Y-rrz2!pnqGi12Gq`w&yI5zLLpyCukFxUin=v(oq6P4qriOLbrLi!#&YN}f#nfSX1r+>3FU-qlVB;^yw59xF* zA;Hi2V_r$qmVY~wQsRv}l~0|YBxQKnlS1q_$w=lh@Z8khSCE!Iq*b4ReuLmJSaE8v z*}vI=_|L65lPAp_2Q^e~$y6w^DW@{1r_yj$o|IQ3i3j^q?CeW(q*|7JiD}9NUR|8* zo%X9U6*{Cl;(tsM`}2AP5%=acD@1-cWnuiuG>TIur^OL79XMA5Hw<}PHzb1~us5V- zyCcQ+nGH!DPPr+Z_imijk7#*=Q@k)sM6c2)7W;!vmEu@gqI&HnpDu-9qm!lR6H8=2 z`gDR6FHE=Im;Id`@`j}OR(9Aa8;srbHcDA4zOpe7rhnq{8L^lTqS#}pShs`;DJf)S z6m$Kvv!1Ib2CgW$!gluQ!=_-%bapH5UTh#WJ|^)PaidXhAJf>s6HjINNzhYC-=1W5 zOHMdD_-Y{`05JPl8c^0a$EG0MnVm2V=zjFs3;+PLdj^vj%i_rFm}#PBi;K){ROU(Z_z`B!l9P%^Nz{iBt##7DTSchO=;>EYp6N@8VrH zaD#w*@~t;Qwf?~mz39FUN|*H}v)>1YQu7RubtDa?caiU@8F=~F1XaxgM35{ykdCBX zbAK?*M5(w{cQ6c>cZ*t);ptRdK~xB{yJ!8ucp3ZNh$rl?A1~B3=zScGVt3*QG4n~h zEl$HsLhT@$Ow=t&$wH6aK9)|2`a^}u;ty)okLA@hJCxS*{f(gKPQ*2C8a&bo0=m{W zF;8c4m|rJ#Tt_Ey;;wp`02!FwdryqDS6)Gn0WpAm$BA{XRA=Q9JHsM;> z3$-idu{%h6nh83FG;%nt#g4vs?(yE?^M+n0TQ(K5%c-f^ea>`41FxK?J)sHJ*m-l0 z;%8y&HO`wYTd!FnVYc4kgH!U1JE!ySfeqc|_$UXqUREtXpQJ_Xuza^=MlEH_yMN~_ zo`vH3IGT;d>_U7z2>kD)buUmKR|=oNYPv)ssT;M>+%C+%V$Cb&fsVmsyNsrr$k@$H zb(9d0$%3DLW^O!65Me-$(3h{$NpbY*_M`&hsA<{NywHyjIZ~gVQDHU8{;;|8v<|=3 z?0vy*il5GpoQrowVBjAZu*-g=(SOW$=Bhk>P=K?}wjcyNcct_h=k?uH6Z!?%8o__Im)bc zF&UMO_UacsWz8S)R0T}-wjFH;iDvPDpC&qxymzy;uiz`$KXX4y>%=r1-E3_G8YtPf zSRI8F;Z{bW!nW{HPz`EDw0}S@fb@El;}n&zEB`fOG$wmBbEYI9GtYN}Xe5IuqI(#3*tL*16NSq{ZF^+X z$PZICjAG^n0sBq}_18bLk~Y0QfXRF%0$c}@Ds7@Fkl9{=7#ugYx}yu1XrQTRsv~9nZqh4@baM(wz%* z8h{H_LC0XKzN}7uvgp@jZ{J;?zYyC*O!(3cky9z;TR|lAPvX3F3lYMwn z$i7fusmUQ5g>y{l`G0Dfg&>)@0y*?Mdf$t+C~f>*u_9vc-;e#ln9d_Pl4FONUWUSqQrYoSqk*#*=9@23V4H|U^uaV0a8f7n|#fUf=n6- zvu{i4_xuATM@0FWC9hX^KEK~Dg%hcAJK?@Y+-xh<&y# zSyk6Qc^5<&B_n5bqQ=oZvQ^BPkTqm~6LLQtj9IVba$y|tH=5HW8;qJeLU4xZyleq9 zcqH_N?q)oqVk$tQ)64e}1>o%YNsmry{G?gr+x}}mPJhxLqS)J%)6~f*|9(l1#;7t< zWdtOMk!GKl;k!bUl!lNyHxMdIHf!`G2+}zP!tp2vG}FO&IGeCyEbj!W_Ve=Z z=ez9k;_7;ry*d5xw_Wz}t^Rub?(E$zJ3Bu;yS#WSK6C#4`P*yx#^w37`0?WH_otT^ zXS?k6#edtgPE#No1ok#O`E>`sD9WQ!n$KqX0?0j?e^E%Jje!Ag72K;28Vsb7drTIZoXn;|b$>5W|C-%w%@;+bYJGLHML)9S5V;zK z$V7qyMGYR`G%l@Ag5C4UG=02|&Z5s1aX;@W6ZPp;%g+Z9R~ba*VZ4smS)?ljvU^`V zXqGaMCxh76>qlnDA_N0E9q$zs6*`PSDp#X*1|+ByAggrBkxB+gLPY zuHev%q#J)ho8cLkYv$D8vN^fE`vgsUxU3)F5iWm$&3dTX&)@d(FTTXul?}(Lg*xCFCS?YQgcv7|fyLj!r zd9!zR)uC2442=y@u!dBMErXik7lxw#pjC8pLZ4=5-8gepXH*l zeKu38C-Xzq@-;LBx6H3Y0**S3o2J0-DzUKUELbx*Q$ZUKivqKu$p&Xz`OoX*!w)iy zZfSput1!>XDX0?(Us9wSh=eQmj(gY9YXSS0Vhj@cKUbOXht}C`+NNjWr!cw?iz-G< zguoxq5Yk|Se%_uzG2w;l|MQatHKhwQnJLB=O=^z7Ja=9_S?G+(4haL#*bGT zKEA;H7r6fn;C{uX{NjH6J>8ENx-Q^^B~gDIKk77~3+Cm$x>F|CjNQxfRjP*7gu7w# z-{Okw5c&xQ`a0+z&HVi{mHhoOde|7mk7_Epf8O?;->XW}QWuq1GE-up+?+tDewWjU z*GU@8$K<^JvDFCiN=aoV-rXiVzH@Ko1*4|riRGe6MZKm?mP~40B&tQJq!E`HlktC} z^F9KWyLFYMw~_aI6h<28oG0hfz2(7XOCwn*O$7p&iTd|G2THP$iYToqO!X~Rn5t7t zHmPzFR3M6^jqb2hsd2lq&$*5@8_be4ny_pOvsof_REZuyl_-*Sx}z&CZqv?OPNZDWMf*Dipe##q}Cv4~rxGt%|0(mm&`U**B z-BDu^%9+yg#kGbFV==QO#^_T@E4Ku=aY&Vrs&~3v=PYh;^85k*1#;b^Z{+r*lR>K) zDOAt4WXI);T8s{D1~orUo}WwwlD_u`;=YK~K>fUm9Tml>@_m|Dg_lQjH>-a~=1)e5 zOAKqf0#yW{S31gG)QSLE%Kz%R0P{;GUKW5}6e)X^QqPl0lDRAlgD`@omRA}15Jf4> z0+MFFzyjQ$1j#YCm*P&ZeU!bdq_{&ZVd!pRQY9q%(~$xjT8PPwD=QWDBoZR?hoE0o zx=0pu;YW$UfYHTr!dcrQLiB&9Tkbs7z9^7dr5*M<@Ta=W~w`ZtJUne${_Uj ztT0-@hpE!FmExPd8T+F#(qG4NPby1whBAFZ6&f0fS%QLTpjtvz1D1|vm!=L~bcLmp zqEJr7-sVKb-<`&>`>49`6@^yEe&EGC>_OFikTOMO&SHMYzjWnE>sz_#Glh3 zK?ga3_1WK<|z2Ve5aH#WDee*vw~j;rh}`Te@X`anllP{c0p>B{Z?pK9789T4Ro^s2Z^?u z(Ha0t#MwlZ0g`uhb57NwMa&<%AxwEh_>4C5FD` zK@fe#igb$aqEGyhz1U_qHz8v`NY9yU3nNo2)XhR%G5&voWH*ytuYli^f>qsmRTq&k zZzrIY2gv<~gng7d*#UM4x)(O1siHexKBA5D=x$WT7ViyJPod*_p7fe^?`$o<=5a?= zCqQ=Ecjvmw_Ga9%n{b!{=eAQtiR|)3WE;IP$_{&_8e1hSy^l%}3$nXaB<}fqFpi{T zkZQS5q-1})P8Fn3G3;a^yK-ygp~Eqs29NniL)qj@nMcGA6P8BZI#aWOl|nEE#c^b> z0`A7zP*on2>KQnVqXAD6s0$#y)e0cr$xc;F+a`NWE1?}@m6iK3H!48t#AoJIm9I=i z^2;r23(JW_RuvJ3I1v#KYQ{~>lW7ztbLpylR_cE~sow7?b~olp?L_uLPFADrD+M~J zdD)#?8@B2FNy*OGCNeo+&{jg3^AB8zqMS3F`V;P4MgupHH0pLE@yyPtOIHDejrBrZk9@%O0aBM1dj6LFiBOxV|Es9wvdv=kn388c=Y@*WyL`}_;ddK zAY1Z81$2qGzy2CQYRGe~5TcluuX8t$@03?6D-i0luUUULV|K*Tp1)nH9_oLHuao*P zFH?tP1lH)_@|n5AOB-`E^RM0DQ$zY_)hjh*9(Sa zvk}<`Ed;~)gD(U_lMp>KNqS^pok%bcfs-%v=I3IJm`lBdn|a~H3A~eRy z`rKI!{WC5u$t6sGIu$q&g^Yjh)7@dxex2w(2W}#ZU$1YJXQm63TFI`ce(3QBIzh`t zQp`k9t5A0Eq)$NWL2``S;&u{8_l>(W(c64HgD!1QUAAWk9?93W>Zc+9DJuY4!&0+E z*HND#c$Djcj#?yyDjL|b5|t$<87eEz=ISN@(#L3gOIx5mM#5L-wbg&*9uTVdyWz`d z7J5m`N^8exojY|@b#04ArxlT-$4F!}Js9TLY84f8pHN!?f99uCVGWU-$7DcTl$^3% zJtjSm$pF?;dLGkF=yd6Mg66hn0I9p+ZBl-oAkc-$&l41wI*^|yXeCZ1rLtv0=pyE= zwGveGVoipgpm`f@W$1qiRHCyZ8G3@MdYh1;Cy4Gxm!T)NZ=Z(tbrx@*hNo}h_W2yR zeV%%r^vPaF>@3oNLMMw~K2@R%ogiS{`lckjiXBg<$i)y3lPD(4t5%l!jHjayRT6gWc>cbp?Jm z6wuE0Zy#mJof6u6`Oa;F_@sdNg^_qOzG?)E>}&4X*X$|8WT*DHKDh*)(sJtTBr9lH zb2KOgE8pg&O|{F4lrm>3LkoLioodVlD|kgUz;0wPxrTq8H91T!Yo}y!Zoe?6*wq>@ zRx~U}TkaUG7l!mBL_6=3OX7jbina20D<0pyYoTwg-rb7FZ^F6ICzqou^sSJoWF}PG zB1h!6*0zxFd`sFE5Sb5XTjX&3Wo=6>X-BFS)Y>a!MRja!s-egaYaQj8N&QNr+KPuO z=C_Tm7&U)pU-5@3SWu!sOMNz*@3KbA6*RO_XGu8+z~eWlDMASYD>X%ZMAxc`azVD2 z-%cZJ+kallBh=;0it2>vTX&3WJbf?RlRO3kWFW^v;KE05hcx5?) zP9o+8LPSzd1F#!fXnV^+Dtg7Qa<#Nrh*GS|ZeRsl#6dKtV*GCM$UBOVcQ9)ux;L2A#%)d0Jnn@%P@ zRiY|d*jM>2WflYgGSD+8nq0|N&_V;~H2jHGXmEd7u>;Tq(bmEUPK{V8F|yrgj%#c$ zE8zTz*75?%p_pIwR+nsR5b0=|2{>t@df$Ir!4wkT*vHZ-06JFNPpl|))vY&zoanFs z`a{{-qiU1|t`4MJ2+GwV*6=TL)n(^#F5|?odjmP4qJ&PL_~U&Pd#fU<YgsDqyJSd6hf+(9`K_hUcctS4?Wm|YgikC3mT#H;{& zxY%qT&xpW08&Hx%{wfBV!(uT9j%sc7ZkYMT5}~xD($ge>`=^7Sg^KxcI_2>zH>uSt zSFnw`5ayXILBL0Du$-B zkM*JclB5I<<2-$Qi_O#_l-yyMsVoDv;anZJm@5=Pi@CafclHjMsWwnrnyEZ9ORIax z473K+v-8ul%Zs-FsveTFJ66v^5eJOVL~DdS|Ni_f0I`SU43X8-po3iSIcSZsXXlsa z*U(mXG&R4;H^SVQ7OMXK6Gb63TzW7 z@1*>y8g^H-RY2SXhfpF({-Ue@hoqd43azrez2z0`5K0|c*onO4{Xn)Nil4}&TQ5(r zf=>7K2@Xj~9SxrUbN)CPV7a=fmZ00Dt5#P1`%7D`W)Cm7l=36zFxTg>;*tX;wSzH0!*SMp-Lm6;PyN%0iFH zmi7%ARJZPV1@xFAX+q^5Q+eMN;5L9p=@GgvnFnhzUfA$->dg-7f<&(bRgNId7fm-o zLYkfdIS;M6AOR_~z$u{K*9y0~n$CruM9>WxF>KjuK}5Au0d0S8C_qDAKyvmga`xyM zsyj?-N=Z3_E0oC}elh?WkXf#MZYDymeXdW!UF3UA$Ic=RxLQP}d2Z@Tr9VFc>H?q& zquy-E-|46{t>t$)_R=p!Ry8c@t`?&&D|jq6C}dc6Eo}we$`^y|L7`)13~ZS?Y)@LYM}j zz_b@&*?|fr&~sn0mG87CAUUfQ=v`$?yEA`3eG}Rpxj~j}YAEjYTDwbh z5f!P~X&p~$dvqNSXrM*c@yJP{WgSnNG9Vp~oFpn=nC1j^%__;U&8n18UoH9SOwXgI zsb;ULKZ(Wqi$TxRA1L&^?8i2G9zCNqdnrAyq`>@{^~!pT9)lylXdPy|nu&=V1$r`U z={3)hRL+0SNF}T)`boIZnLv$+ z-s-C`NXy62=^vBUjJs0#DUUT^FoGVW^#rW`26YMXMmSZQIgz_tTfUj zb<sP~u(hrZdmzS*LO1j9|o zGU$JnK@iSB+yYYG)7xUVydX#$G(_pkrr->k0$9geDr3L6@17w04!xvjE0V|ktXY*^ z$uqJv2s&m|Ch0w6%vq&h3A$7$L$Og4=K&2b{-iti!ra!9!~FK-s=P zgTU^K>yff|=})Jisl5b(=O<0_2lB|BF9`(nm}@cdfpZ$i?xUQ+ZnFpIHf$^L&MQiK z(ZQl!1TGZy+i3u9*YUSt_^mYN=YhA{P)?8h?KDWT0dL zLTzOuRl7+7W)k+21WZr29!6#&0$|arF&_vSCeB7W)_N5azn5_`vf^uTT)Y}(*2E3s zHEf2AW_o~TlzB(#v@9z_W+I?6bQ?thcSE*-btO!u;~kU`5Jbv!pK(!*6&HUBDR(Em zZ8|4y%J9fMZ5h=sdAJDGeP*w8rO1@Nf0E+EFGz;s?@|nmY zw&;qWEQ&%S+Xjy8&!ZONSzU6qi7FKCMJLmu;rvkSDr97~yUj0GZz2Wc)1Pj=*StY} z1-eGD52`Cpq5_8W8YN01DrbMoUOLvIQMrcj%L2L46sduhfgru9R3n*are(d&iirr> zmNYjIu%gpcvp!wM4NMQ!FQFN|-<5#@+YOKnBrJC5G(6pU`(x8S0b134$d0|ttYguz z#W|;k)weiybWEWiJ9313cI@O)%X&*}C{(?2)Uq7O?nBc%4oUAm;2eKBWAxDR`5Ch= zTIo^bEk!FmR2)C!^ma+e87FtaEQwZ?`rBNtT8JoLI_#PStcfH!)SQ0cNx|aur&HAu zx93aPMSNngwlv`TmU5@}go7{d#zA~~CnVclPxh}isWJnxc+lE583n0vC z_W{C)@?*Vjgn=*AqNBvbU>3*XSIbR+o0X0*u!GiUkT$LoH%>B+?qBIo_O_iIpyqwM zkf~}@Zn?ULzs@F0Z*XU*TDr^NRrV*(VSh?)ZbBLMsW#nid6s|6woLJL(jY6&FpxG? z@by9Xy2VLAW5?+iUnnjdAk(6uTV-DWli7V&H&Xnz#hA-RHJd;BU!pC$i<~0?-VXbi z@L2bS8@dAyRIKPYT8;udm0-D#K5_%vfQJ||jO!b_>chaaY6tdcuoJel@HZI$_ddr0DKya^s8Yy`kKGD^pnt zJ$koDjRD=)Q0I$mEf#eylg0&xwUC23fiBCo+<7Z{({2E?=<%6rP)qi=qhl306tnIu zOE$>Im{yS)JjUdp&FV3h1Iuq5NL(Fqz04+BUWZ;j^8bHj-$qle$~$n*9-|p^M?w{2 zNfd=&Wzh`x`bvznvL*+70x@>BvQx}Yr-BZ0W|3OWE6=R#wMRd*K=tNU@}3@m*+kyU zvD1OVvQN-XOlB1*@|{Yl@edXm)>sXnNwwhz3N6(h-du?O8=MJ+vyK zl@@(hxf%22Kwyp@9LnZZUlb#6qhaA`G-y(h%o{0TU&j3${9e>mDKYciqL5X_!WmCp zKUmGW#^2IxBWxm9*^=aXC1d{A&F;Or+>Tu_vwzZl)LyckMN;UBhPe1w*%A;%{#N3K?d zPG$NLQA3YMo@1h9XT7ZXmd8T8i2o!2=DcQc)&dpG8zL|jEg^rUwgXrT5VWh`!Kn@cwVvn zWFcyx_*kcv!N{?3P#<+b{dqMnmFIuXmr%E?2I@JsD-M?BBhbm>m3PEmp_AK0D-Lq` z!R#>RYuKyYG}Q-pt7il%9oT90VyG}-GMi=vZn9x+qVk}8sfviDLj4fzkVD++)S{LF zZuF;bqF*FZbg;<0o;L!b0~%0$aNdDPTvD>uOVN;dg?PNHg*a1$(&p3m_bzwRf~y)aCtD3#uX*K zbLbTDfR9pUJe@2a@PTNAZK8kITvZ&^D=+M45U^$%BpBWycTPz$Wm&tF3ZNDVFO}vg z^JYj;t8*mWqjJE?m97iDy24?hP&;DtB;uDds5LBHwXo7Ptw{Xu-)un>hNikJFp`0O zh|IHJywFUhMMe~6sk2_Y&_Kds?Lx!T?I$}~iA*aSEwn3CoL3!{SU!KeX~b^1?$D)+ zp34TQb>1ukgDp~_BzJ?HS;0n=exwE#fU1Ud&Ljhoc6m^8p63mpu&(tja-kNr-!t}a zsr&wWp1G*C^F=nb^4qG1GC69De$GizUJaD$hK`e?r%fCux(V7BugM?QYtp)>(+0dI zYLoq^xlHt+es_O~40(U(*kNKOoJIgyduaJ z+p~N3Nokl7otou3b!H-9ojSE&YTQA(O=x z?Rno@1PIBF7r=95v1V_}tbaLx7TyN1zmpYj0}@uY8E*qp{cV4>x8YoS8{{dH{su8? zx!Zxx8RDTS0LAFzkZdhGIb>^QE3OZ+=LT?nbQ+;TE-C=IK9C5N%=OXm24KzQ($eqI zA|$1a-($mSR+};bbTzBJn}rvf=s(iOqR$A~!J@UlLfCE0*)l)UWlxLNSJ%2(B*WXw zZwuDHIA6XvU;cmloG;ybT_D#E;5k|4+L;5lEx%5SR#DdcI`)%O4Mf@{r`quASWK%w z&;2^;;;wEP^)4PQ--L7koIAF=PZ>y1pvt0i=ctKuN7YpS;@iP|J9^hTlFGIC`E`E5 z{Nn0a=jwT-d?R`KWs<40>+?|mSbm?4d3vIhEBUmv16hAz?8r6mrH?q#@V)vb6tMf| z%^T)<>`}bxb1O}@Yt&hk_xAOZvnT`_h>{a;a>C2@^14%NAZ`(wEYzQdd{uxQqol*B zoesOI+7t_$29KL?8Ubz`F!Eha<-9DG7#?DbhB9oFvqB%h!c~H`^TqRQ(q#j?jB&{ z+bSPme!AuQDRy#LR&D&e$SF{J*Lq`V8>uek&995kLffD2idowJpztBPWB?bP#YWN= zYBJ*vbF!z!qQji-XvysHdY3>I)e*g9jg{)BAAf%?l{9V|*J7zK^KXoc^8rjeLE4ZsfWX@CRn@8c zkX)NZ<1F~D@cTYF@5$nQpPmlIHWVOlvx|Q!V?SNz*I^Ua2z$0;+&b*0+P<1x0~Oj% z+Efv9-c+WT$>MDnz>ssGTdIwab9(;MVoCQ6oQd}*DUMrzr<_6F?kqY3}qp2Y$n|!s3riK!#=+`1BJE~PQwe{?#mVUQxvzveD zsUg<0#!W=pWsO&&spp7mE1DY0cd{Ez4dg!2qp8V0IO|3tdJ@!XrS!VKKn_v{l8R3N zTG;F)(A+Zg#N0_B=1DY*2Rzxo^ZEV$nePVC=wo)U%$N; zXK~^_e9QgOIGrESmdzL$<`KRAu~u=2^L2M6lh zrvhj4_g2ll_?W*y)b@p@4lXHGxzsa1 z82f=2^AIFTj!2(VR_B_DmG^(Wd`>(C`EvUCL$S*0bK<@G*qvUN-k0Hf;_ZEub0kbd zb6()UBKOHuY>)T;Kxhe)wV|I@H|+E0YIBMAE1NERd+HB9y$fGPv(QTx1}XMw!s9#s zL0p9+TN6N4xAoxn+wK^u0KE6Z|py7qBp(~@BQG1UUdIOaomvNSXJ0w z&csm(KNIcoY9Rg%-n$|HomI%3At}OM`#kVI4<+(69EeA?nIDQOSUa|^mNAbng#{vPW>f=mkco*SxmP*A!9frRbip0^0TA?UB9i$~u z^FL!Z^aB2|^q0%){ zIGz=AHwpP93jM)*S4iu*Tvk~Swx{;^nb!PDx0Nfwd7F7ey!(0{=Mr#XE{pdCU*lUh zejf$?;4%O8+w%%AFh8m#wRE3PAKZ*%ddm&<`Xf)XO!m~8zoM)uv@wT(^ZN6IY`^SQ!Uxz zQ=X)yC{1<6lAy`sYw??n#cE2rbxspQB!fNor@?DQczCAbM)An`btZH&@$b}^^&s4- z@5qUySAU@3UM2o01-!xInu!&F?E6G$pT*V}xaSs{eZw;C-sGI!8jb-R(MhEPOY+j$S$n+I3LWds*Y_ z6?-D_|EcQ49wM8-b`p+(gvBHr!_%o?g-LC4(0W;F$9xjq@n86ZSS>#sRiyXTIQGL& znDl>!`mJ{+z3HW=GH#f=$U<430*oNQrWmN5+hJJJ-Eftu11wDc8hE=1n0WjVo+JD4z?In@QS|0p!!t`PUXUXP_oY} zYCq)v7X$Mb1M|iV%uDrFK;x&q%D0BnRMrdM8fefHB6irTF&}(NWcqeqW`j+*c!ZZF z942}7v3oxqvq2Qce2`|n2j~^Y=#gtc6)>`O88l*pH3iglIG^lavKiGq8!-DdUORt4 z{kHdWx0jOPrF6P$)3rph^C@fe*;z)d6C( zD0?FQ>F1oNI(}JsmaH&h3!dzwm|}mn^bW#R_aH{HB6n{*MnH^i3@(FMwQfR}Y7o$& zfDUS86EFs9t-26Yr`&=v1lfSQfHue^Y%DQSn2jW?EY|h_7;BAhRURbP$|58O;y*cA zvJwfxR`&o$vJ=}g<2*Son{i}b#@@`|Q>GkWW_LL0Lt3@l=r`J%ZIs*Q-u-{XXHzzI zr&E7@LoIX17An0Y{TRDt+GG#N^>!#|@CXkbC0EX#edKA8mNjOzBaudWXJ2Yq(Q zRh~WDS3OJ%3eVWS&~=L+k82oeSH@O5*y!QHsQe&g;B$A~^^K^Oo-Ql62yuefc`STNHc|BG5Yc=SWF@Cp?4RD}o7Q@L(%_N?M z@~e}KtE!3mnV^~MRk{D4ul8q2ynpM5`#ij3x2}GkaWvx49PJ$*HPc8I=#U?3Jnf6j z=VmU!KJ$EeQ;Fh7d2@gCWuG{nsHD8Z77%5U6JNGTHXdk7fxIN0Cg`Ecs1)X^+dDw14{Q`s3-PbNzqgHMF11I)IH0WfuH~ z9TiX5d=PXpO#lGcQ)ZFfc2k*!?lN3O6LII`S#?&A>*}!bCy8LgDDZf^%TgXs{7}$T zMlc@7QOu&jU>3*RqjN?P)Pmessu0V7?G2_94Jw^l*xrxg(dmm&w!RUFr_o~RV>%XM zCy#%y;kmK0ahrd@iQKq+Fpk6-+$mn{<;RQ5GxqxQ;_~B%b2k6Q4X{(1;E&?sK?t$c z+R;j3+yrQVb7S_%v^_Uw2h7sB5s0f!$uy2eu{+siL(V;UnkF*INW*hsx>3EinD_+~ z=f&6lu5kh7*?DV$OlD`z0?+!msN28P=JKN=!~U|u0VRKibrydso;pD_v**QtYT=zq zNsidZw--NVMtC~4CaQ`+rSl)(pTD|3Ka&$x{IDk}V^h}zaJ(ovoQ3{FX^m`c z`&^8&$c?$-Z19IES4G41+jP~v2?U9U4eidR*}Y;?vHtI0gqHOWb^z#AX6K3x@nm+C ztQJoyrYc|N$t*};u=l4|SLbJdI5K-hR*9q4)`*qQZvr8*w=Vt3O>Z`)`I4d>o3AEl z(L#KiqYw(mXnu%PU5VD+ts3}7uS=Q|NnE6pu@?_iC{ubnVSkextPRyJ}`g^)7hn4LS&PkFtG>%{5-FZ#8+Dp=$ABGRL-sYy1OP zc2$=+%o8bp-{!kI-O^p?LI>CVgHHa9H&{*CxbXr2Kv9{ zqQz$Ipvg*N-B>v{>{Cm z7-x04xGs9XlMmX0E@FeJ2)D(G9`AXJ`H2<_Hn3QK3=B4CK|%B)*#JtaXt>JBa+woK zn~W3!TuO1Q!Ivo&5X!3TZi}ui+OBSJ9rIMS%L?cse(9dKRh($6^aES%z}9TZI+t`% z+OW)Q!oax|+8AVHqn6rxOks3p@7Owr=5x_O`?)QkEmFPM7`|HcAD=f_(v{2URRwK} z?TO}pYduVEP4@rRdtes<#32N5F@XSsNid4PWeTM5!6~bi6u~gz61mWeWBk;vmdm>7 zid;8E*FgN-*FsmP`l3h(sVcYLB3CR%&;?@P1(UB;;CpLc0A?=8RK12Mk&R( zw88}!mEe{$Wm2S!K@?6!8>BtP6AfNBbd~mhqgrUm^9PK*oPMNo`BZ+Sh2*diMs`$P zyEdwUiR|meB*5cULqE`>-UEl%Jam;4i81EUD2yU2rfv@UXp<0noe~%>Z-zcHs7!(e8b(&vWK3D)Jh}g0+Wki!4kW0 zmaF8XaVq)55D+69T~0rgUy3C(w0jX&*ZVwiO1pg2E%zd*I)tFo5k_Jryo?Sa58g>i z37K=SUVCX35RqczapOH^h+Pkz6xlU@PWH{FCHh2t2N$dPGbr-?ddZ1BWf)Oz{ZlTn zhg=f0U|zA9ETY9|tc*-bCnW_O`w9VJh*-g?RnfvtUlYA=sv6P}^hpNGTA28)Y*0Qp(X7{s_4!VY-sUKplQ3EE*9TcMhx)Phgdn z!}$5VP0t(vG}JI4&=`TbD>8p0# zqu$bO=q@MLqjI}kZb;@JWFw=I3_w^O020qiYEDWoQj>P*4Z$}1`@y<59$xm*Eikea{79I{oUWQB5+Ry zk|Y%ju%1urtTK9Sk0#MRZrver zt0FkXveE&)*AcTf%sN4A$x}CVQIhV_&Ws)#_VpBJ7(ch&EkPW?@VIVzRrkdALq{wa znzYe<{cS$dece3bIjb{KnYhJ={%IywRwt+~(AWG6)oHc~Sd+Gnq{vDtCpXNdmL z4QJ`Xq*wd41u}7z!6Kamq()p0!$#>KO6xmkUxh!exX zC?8fPN5VwnM-qZi-jG6fI&00)JMI&5=QUY~d-UoFmASU#ETE|~N3Ei@#Nqnkl5^HX zViHt%)QnLiK_RngY*0SjNtJT(O+RjN6N(n0A#+-KpvB&QS;J7d_!Eb9<7(~Dl*I}# z(jEM16g;F7MO?t~k;UFXD?&x{llWqIWeA(1DSoBd%b!-cWP2H|f1xwP>cfWh_ z>*CkN@v(Y&)6jmfHr3~4se4Kz^k}>3kKUSnzihuGVH}$-D zaDe`QuZOJS-oU5Axpv$i_lw5&GE!VbiW#UNh&^hI0l~^FP?4I!6a<%%ux*cR2hJwj zd*2?U7MI`Fop|bcpc`?ewUS&rl{E7Zvx8_1#So%*n62m51rF+O1Wg&26Lh&lM)OwwF{Bo?BRw~9JI7AlhpB4JBfS0utK$n2<7^Zvz<;(Aqo zrp@7a8ylqX&JHt_%jqZj+3WsSBeGzgc5`5Nj5G*T;h7#qHZ^ zKWsPOv+>~lv^yZ;#N#j4>1e5+uQqQc{S0&5_k5G94}vo}{U29TQC$7_=JLgh_wRmwJ^A_|^&fu$ zP)i30M^d<#R0;q9iYEX7P)h>@6aWYa2mtvbm#ozjIe%$)+enh__xCHZ)#sfzXGRn_#fd}bgbC7}!gYyi~K-SyvJE&vFSNfL200n2Xj^r_||BO|w) z5s^0{KL2B5;$>GG&o<7dLFo4{6VDI%#^%OF5c1Qz2^YVV--SWM(~W1J|DoQ!pN`LY zvhi%VxqsnJv#VIV{l~^-kiGH6zuDUOV{>B^M;VVY@o^GPFM}v$|Bz4d((GOA2NwbN zkGxE_urt^hYz_9ecJ{?Tt3Q3G!PA*|1wK2Q4hB01zkAo7en)O=m)e#$nS{Z}%Yrxp zo7|%|If}=9@po6#^ZxJgRh01Pl80k2>ZezpAAjHIKVsKBNrh1Pzd7g+`#Wm{+}#=+ z3Khz-G#hK+dGE~Z9i!+IDe3b{Gh>8$qzkj@X&-$ z;xx$OB;d$Sc-nBOjJ<0fy%e7lFYG-cH!~cxGU~%7FhPH66L|3XghxJ)M%cIyjj*tC z3xAwsNf2E!2}Q4Nf357r-C}PH5Bh`t!TNpibZfY{FNQ|cSSk_y`M{83D3Cs)C!Q?%Xr z7J3lgQHzE9Ep#EgqgIQTrV-Jf-^3D>1DNqNd$VQ`f1gG{CjL7KGM*TRQvShK{(lEs z-XvHUO#Q`ve>mt5Ko`JHQ_E9!>C-gIf-(OPg?HBd;nAfKqm3@@wqxY(wqoS&HZgML z*aODxZd0GvH0A&Ci^5FvrIE%(!iG}B7a`>iU2n^m{lWkw^=1Whkd$5apO~9bq*h%J%zMdxD2yU^dv%Jz` z#Kk|o?5r-h5^!V6QN^`=ll$JM zpYp7Cw(-`RMx!fn3U4e2@?|>CUK6wcrlScake|BWWY6o%lmGA%U^4dU_PdvepRf4~ zFXiur_EWlsH=c)+D{lp`Et`>jx_O<;@Uqmd^}RS$VeHcl;9QJc+jk*@9agBv z4t5tGYlRg{pV|Z~k|}}_`+rRo1$7YQhrpX?GR=ymcygC!eB2Krdb^Im;Y;zDm(nX2 zoKGcIzVjyXsnr#wT!mXwh518@lHX?gUgmA5-Zk%Mw^{u-tFlTX{TL-O-!n^ASfOZ^LSJ2ZFDVEywOPyJqP%HvVG{ptAm(SN(+{@Ab2x%!OL z7yitCNqNG4o(BF>y=W+8KiJxNYB|m71YkkRJYlfhX6iDN}haZ{QPqyuN@&h0R zRiPD99Nz|dfn0GmN#e`I8w+8${&q`zyOn>tb$*8|73%Ga5b4CbE+mqQkq{?U-zaJ1 zH-H%S`mpJ#P4r>%32bIT%%AapX2sD&Z=i|JOMfa2p8hO)uyDvdWB)6UwErc~1n~l1 zG+b$w1(En5mw%g5S>g+g+%h%FTk+3qNEXTY>#g}c`=nfqc=oT%pT`MR@zX&fYEfXqQx|u`giOiPS`l` zGoFl7plK^t{L-h=bfn6zuj!IvH5Q+Np3#s;ZvI;15`PNX-uaEL@aRvasX*nxEL9uBf%qTW z*?qSE6c|Y|K9!;@B1T1~;nv^@8yr3x3;>yIbe`o;rI~&e7@1jqVqL2bK%ZzJCIMvD zY$xbpb${2e)EPokno9K0eXl{sMG}t<;K8=V;JCn)Mz@pnr_vNB98=7fjjJ}Y9^(q2 zs1dG0%0O&iHNNGSLpB&dd)j+#W!iqKq*C_V~P1X6s43Io_|l%#!6JdM$&v=>aI7$>r%N)YCbom zY)LO0&@~!5sb;xeCh3HaR4Ymb`WhkLjMAS^1DuN9D*MPj2a(Tjivt%pPR!S%4*N#~ z7yMu`Uz@Jh5Y-S4fkC4I$E>X#pe-7R(62yfupzf~)qyRRqVyBf`}KqdCofe@s$okr zFMnmDST353`}F<&ga$42=hN_`+~0Cg?RWPRrvZnC=hM&w-`!8h-Xb-Cz}|jB#u3#L zu(O}oIG=Zh(o}tQSX@o4H!j89-QA13ySo*N)8cN6yF10*p}0H6U5gi|KylZP-S>X? zc`pBulgZ>Hzf5xG?99$S3JB=<&~H2%^n5~(Qr>!<@pcgzNKEne!q+`LhGd|yUYQ~G z-!vD@y6brC9UJa!)HZxfM;Q^y^7-R$=p!-|)yeb)Ktl4nH7U)AoM>iabkSC$?sRXG zZiWEgZvwI22O;hTxf{NoLF-9!ki-Ko>3u9|MPe`47^dIBB4Dp(_WnLU2F3GlJPEmw znc&o^^B5IHVljOX*v~eU?>@iAI~G!EAL37WR0k{^16*W6F&4@FzPtP$Bf2Ns*s>+1 z5C8Y^3mLFFOJSVJyq7h_hD`8p4dJBCgN5p1bh5smc3KLLr5$i8A-I1D5cGSA?uxai{JM)Yj?N;- z;?Y0kZezEP6pi!CR0ZQst!!Ey-1S`vXYAO|CnM)E`H0i=#lY=WG1+457sFBncLv;` zs=X_Yv?mVMQS#UPWVE`S^gXnOhaWV)QY4T+@Llw5Il3ZC^I5dJ2Zt1DeDj}ZzU8cU zOBDfzTx_gyzsbr;rf6kT7k zfi}W5?hdzquQpG8tr#Y7PM#HEI?s&tKlfH;)gt@y8pl3$p;6N*;%78JzWwDgwpS`z zmr?Ki@l?>a%vzO~+jll0FK7y3JTsy*X%)UVz9K~1U6Wo=J8k|+@-YfT2kH|CU zg8uwlEqD*O+0OteCh?<sOi$ajl11pv&Fz4kpI|{jth}V)n%QR zRz#u-r6wisJTf;K@HrJr4#ikzUPqs)zhp>vKP=FO`js0Uok?xBiug0?CQ-IxPh*V% z_CgdyYbQDqeGsMCne)RZV;*AO>e37W(AMvXmh|Br_cGnDgYzCgq93j`Xk3r7zf-OY zqkPTReidpHSo63E@6Pa-&?)Jrb=|DzINVNNy9>?vS8+6{z+qAzk|?GirkNs=13saB zFeCpD_7I*FOwh!FOr#vEytq7YDB$j|Cu7uIli!3IICxpbw~|ka&*v(KE%f-b9>~^{fAfB%1WzxWt~lYj z*hi(-t!2-O^XC{-Kr*Ha8k@v{&JYRzbN({$cgvA`!-s_6S5?-Ht4x~pA%YaAH_Z!4oG&Vu<%6#c}( z;Nu_BMDA%B!_vt%=$Ey}$3>*JETBz#rH6YBjvDAbe|)=UJ)O)mb#A8QX2^s_TQtv# z`TK}VUqL`oLfGW0gK2zY0oc7c+WLL>nSWb%v~BjCGHM^%UO+Lu-JMKck#ciB7p1?z ziLg{)emC#Q1{cD0CXy_EMP`vSJY?YUs>)fucyOjZ`HFKyY?A?l6{0d}WX3rD4~BA3 zkN2V2rxZV|1pgZ8B}xw*iCRww&y?F7M3`4_a&RK^L#hX+i-yWgVgNl@Xk8naDH1s> zWx{bBQM^TJ&%pOs@4W-$kw`wctVD^k_W~RGCm3OXH+D+thgJu7W2u*Ej_e;$34Ptw+|TPV6jVfw6J$tdB2l>OKM5PL z3EkkFOpbR6rLa5_atD97%)IaKJphdSJnk>k=64I-noM$9epihpTaN5zOE9D%j$Fr_O~wUQGtM1jY{EnA^tYI{;d~Ma*K3r+r_%fz)DT z`)xW)uKB}RVAgoyn-C&FL>;b0fYD%oHz5vt3JeWnQuRtrvUi*1dPMNbscXXKRg_pk zWB~G~;72~~iOen;7tRt$Xg1_vrShV}4fNtpClW|7Xg0mzO=T5lMsLlmA9_@)TgE+R z3SCgH13xfH3fuv8I-M*bKb}&ayK9Zh0W~Fp) z)DMG1?2rG)M>rE;z3(TuzPiHJCJ1g8LrP zH7d_~f*SI+qU+M!=Vxk3&{G~wWi+@sqGFpN^uV0+*6~E7>#>j?|H5@XsNdRfo`TkV z#k~mss#rVsK8dGq92$IE;qxX9hXIg@;qKGoX4``TSoO~3Yv+iK9K%2;T2%7ed#)V& zISxOcx(dv?-(-#d8t;^^3)jIPp3S{*jRr6K#aDCF7~&e8G1@R-jp>B41CJ7*gKmbv zJLza^(>v!-W2-SD1W_Q?h#8Xey?Oy{SFE?3QYs7#Nv9xROC_IfFwcSc86tCJn(OWR zD~gvSK*vUSf5+Nyl|ZZvJUG3qFLBOl_*W(Ar#Xf*+i6Ml;Sg19#J+`#{lEB6Kh42I zGpbzman~R`S8Qfz^4-I3e@2~zld)MrS@m9t6>yF_O@|18-9{L=nvdA$y`sRxT4~CR z)t5nHp_3;ehbCG%F32#BaS)J7kRp;S+ZZNZ0_5+>(8Se#uUD4*m3`N*IU2>wT)v=J zU5F$84gncfxEoleS*$U6VB?C3iY=}_hy(}IrgCfabv_ntF>5~nHz%<14{G~vf ziFWZbx+076%`NCXwr-_k=yCkyFPw>1jYz_MgDDG@H5A6$&|F?bNFYHC_@x zudMiumS4KZ&^jYnCQQUk5{!9b_>>pH)>h2R(Qaq2GHq~vWO-|JV>*yC`>ILag6$Zi z%@ceH$zeW`C5ICOH8E^Y-eDYTdfGTW&7fq)kf`LV)wE=FB|mFO+3{!D>h%W ze;>}+%!pib*w{a!X-fTabCbFaYJEQd3|#&TSN8J{vL>6g$l>Gu*Rx>n-)qVb?!i`X z{jTWpFC@U`iWB#`GuYR;G( z`)@`#*K3k4O2f?O5eabHOqIEIHyJ_XCNCa&!y;F3li>0n8*PyK&%zpHAub&f0Epg% zt#)i#fomI^y>F=gNj>|xuKpUV@@qv62c@*MV4OkhWID*u^tr;J@JfGSOAg%&3n>JG zhWWTWlc95}xQ-UDeXCXg)JTxCBY&&G7D|UtSuj{Ghv-`#rLA3MG}I!dQjo~=WU%(C zQUctr$8N^7P{m9pqJ+FkX}{&F!L z76`o+#d37a4hVt_(SpX7g&J6Nr0tXr(zT3S)QCf~SSOm_knfZ&)Wj`~S*#`y<#M6S z!oP7=jU1WWFtukRu!8wZtv`BCPM3ZqaasaTd)a{+ab&4I8<3t?uxvGN1@uR(KSFLm zf2kF?NLH&>;(x6%iNF^(2Cu?UqZG)bPCzHku}}+qASZbvM?+vn2m9Wuim<+VDE-~9 zcS+{r(cR{AUS}3AITw%PhIwFe?RuR0gdO+@$4Q%T!uv9UOOZMF`UX{Wa;=XmHUn!| z2=cYmRO|{fvQ|8%3LYJE3LwGVlr5-DQxsd|gqNmI$^ZtgZIq(zPQW#p`HC%*rKm+k zsy5=)Oy(d0x87D{V=n{x%0XM5aZOFAFFFo4I_QybzmiqbEX*656v@oVz$R4WxAer7 z4hMZr;)7HMdTxoTR>(FndLQIo(BOhE=?TS*%=jCJ>49V#j{kGmIDiE#Wb9|P9kd+a z_AZJ)he7b4(I=(OS?!40s5DE4m{lVoQGWD=MRl14P1^r!G7KKC zgx8^Usz)KC_Mk)cIFaf|w5A6ZyP-y$TqkRZlvP{Y6iea6F}4c;&wPd{^Ax%Ps>VKl zqWbr`Sjuv}%^?o6xc_#DffzVFXMCD0q)5In%PESCe*amYCSLwyltYy7vC!{PhyIQz zVlLraJ4{h?XS6Gn=L}0tX)pX2qHQ8F9*J|(K&~eJFDv|>uvsf);Qi2I^e_WUYN+On zG-o5erA`;(X1EN1r1IZ)SF1`81# zpPODck>*3YH!k}t_XCVqu4nvUlT0T5-7Ae%&#_EIXy8A+%(`M7&4FL;)$eAxSp4!7 z8(|iKB@--ZUsT^`JPpo=ICb_9Ww+m+_7(?cMnw8%z=wDbxRXU5pg4O}yMi6ghaArT zbdby#_@*zLMptIo`(&NwvtV~>`fgPbl*mg}G^>#{5pvzE^XCTZfUzK9v(cQhuzKyu zuZ@;$nFw>djBxo^U|lPc8-CSMKbP(<>V#-FBzd1;r=;PHH3KyMMM9GT6f|MtOsIc& z9*l8w(7yl`z~`egBAJBg?9~MBgJXh-PsifFs-Zm^zwO}v+B7R>yb5AjO_GDT-pg9x zM8dA5zb6X$+};i0|B~gui_(mG5Z?gz5RYKyY)3vQ@txVISa2>_J)lnt3;vQU(3J#> zV>s{zVMuyRVgDE=B&J06<3~zo<4$!aGj$~-+z!=JSOB^b1@y_udtEe112~J6djen8 zwpHVtTnV?$Cx7Tx7=mfgCO(5_Q||2WDoN9x^lqyhHaRKIbsnJ!|=P@XfKMmPs%C!9>Nm`008-ihIl z8wZ**_;@%>jI&bln2`InnoR~*aIo5ffm|XKx&%O|M>4Xq@l>r~Z8lyWo*WU+P|l42 za))J3zpvg5vyE?1jxLMmDJVr6KBCz{c}2n}(!Z9VY+L=omOgKR!M$ph4N~VeUDNj5 z3p~bPlxR_&h1*s10m3H)%zC2S-!gjJfB4T9?3>oY+Qv|jfvA)VhAy9nqGc3rqRy{I~Wo3ut33v{2THh?Nl*C8(?7- zOp^q(x+kaE$?)oE#C}y%;@;+MjWGCis|koEY)ZtRb7^OpI0Zj83snR&%Z7E)*XXnO z3DttJOw?f&24{g3ab;aCh!yuF2j46~+n~F<*cKD67pjb(bI)0BV}-0u${0EUFbxna zgb}RYr`@X&_}cteg-P&hv$g7IT+j3%Q5%|{%BqriT#~QplC{cTKMMUhr5ePdb$Kc6 zrvXUc;U#{H7Qt@FD<#)9tJ35ra^>KQ>Jk2{+d>Qv`iljQ(+z+Lx$<{KY(yjm9ovAV zuPW2TR)SlpONIJ=Y)E3cG>n3^X^McV7Z~W2fSTd!?vD>~HVQvh0e;Z*b1HgxKISp< zn;=nt+HFi(&30#3xfhx*Q)uQnWn8d3z}19%|2CETS zxXx#r=wJB?Z^6ZnThn9P!kDA}Hf91QLm=z>z_?0pW}W^VHdZ~KwzKDAFe&HBqeMaO z7%dJYD&ytwPg~Ct!}@goNGk3owf4h?rMnu9v(K;U%E!_U@vd5qeclnA%F_12T3kla z%HD^i{qxnX$h_G>AKJ%YzxU&)5@;Wx&~-!DM?1K(?4N~J_UKKauouduIVLHJ1$MLM%E4#uLh=MMv&}gnmKMFSb11i9qs;Bp| zU5S2gC_*C}Y?Pm3NZ)#NqgmexrLq)}T)9Aw?aV=cE;KM`|6-xhk;a@Z4roo1$C>aw z-J64Urfu>1Yl=oWb7MMyyScd{nG^MlbWsp%_ZYD36k9{sK7uaYso;zsqCAd%KPBHS z^t*X0+~z5s;_U5rvlGQjUh{YJxcBttf8u_vsc zkt{vlAR}Bp4*W?buw!gq<_1h6-fs(YGi=AIW!ZEVDlDM>!n@uLZ{W{a+#vx(%e6Bj zwG*wH?_2v|3gfycA+>+(x#Hz`TmAf!wU(`wAPj^;Nvnsry;-HptFFETRk^8p^4QlGS_!=oK-l(Hrs2IT@cih*D}l+b){mlyWGG zAv7Idc&q=>Lv7#-2>lr~^;o3gB!05;#^w~z;yZ4ASPdTdPI!>t?=bP5m>#jQTQq`? zpYXYa>Ue#a0>2pv=`ahB2#GAyU1VHv2`Sjy#Qisb_(E_F@jGmH-Pd&1f8|wAD4<(9=yN|6tNYAoi)V#Q6>iTCM?BUDVGMgEJl0@o%bI&9VaLc zP9oc(`#O*1Cc#oYV@v1LCff-np-pQ$Y}l0`=S*?rR14!Vcb96wn6(x*taXsH1Y-vk z&L6!2Q^)2kqa_xhP0uGR9GpA7XZ}R9a<*>L^-?`YHAuzISfNhgv+VCL_bWq%ieBC> zt}ykfd0rytyAv(h&2~0m;8MSzQA!^t>RizxnHkxyj9{V}zYf{(dWxK{?+0_-$0CzM zpWe|E>F3hUIgow@q$bsWSx_3$oTG-cwc7A4h7+e?Vj${mY7Kc63yW`mRfGTb?^KPy z1$9gkk`eP>n>SQy-Dv+*RpU)cn^$jN_?DT3^X*)87YE}OlK$oK%GPj8x`{tr)*b(u zZT!!pSTvYOZDHAWjlUs*Jo#3^`7GnlLe#!-_)^* zaznnkeTPpY7sR9?jX#Toy6zUpWY^^C&JwN1-4f3a3<=Roy!=)G$kLyUwZW;Xq5oqx zhsKeqR2;aln>EdKU`^jAHaB{8?*g7>J60oyw{Sws2w*(FVit2J93w%X-qw()DcD&0 zYOze*#0+8ice<2e9*+Hs&oEYLuVhwq*8~jCdIO1}g+QE4(?q@borG}bg{xyQynd`uP|^(0CA5I3{$3S#ZVdAh6aYr_>RZq zJqE&$E>i>-G@Knj%yAKT1@mSw!pi0UxI+nDEbi<8^Luku=HHo}URN{Bb1SA4UX4uLJk3`_h@=}g7l~xud1=@3Af(Rsf-CK zeeerRO!E{4ClYG?_D|cTHs|v8X~GBGzF<)VON=g)DmA&=TZ~NZz6J)C@qc#v_yDxf z*0cjDj~~*jv)}P2OgLGrsdZhCD}0I;q%w?TefN;cuwlwsx6of*VC{SYq_WVZ5vNNb z2?Nh${794dTl21UMfl>+VZpgfhjO{}B>KL7Q%w5pir;DKArxv8PXQHNyf|eJ%V3Xk z>os4yrF!owKQ>5Qu|9jhL0nQd*#?+DY{`TSF-1{MuqahI-G(RP*P^|<5cANK9q+Qy zp#OdMX!thXpCV3CJs>c`ggM6%m+;J(7!`BMuXteQ;m6Ge`K&V08@SYmg|RWjwy6l$ zCq#H_sm6=>-p%Fvb&JmO_k|DQO`ax9!IGTsfZt@m9fRS@Z&;+I=HwWfvXA`_>(VCp zhK4I;_MEUkhA>o~8G8kuM{U@WE9>Qnqz}*d zHa6v>xi429%sTn?*x13ee_`TEVDI4HH(i`SaLd6MT1O;|QdO5s#T4&#MQiwpYjgm? zGTs>n7r1NL*Quuahf*Rm;wK>R>=?ctjfb~4K2gby&%uYn)-E_y7wMvct?>AdEQXZk zk6#fyUM4*tjO_~i=ao!R**JH~Qbw3$f^Ns}%~U!}W{xcAyZ3DWS-9}@|WQf&LQT3p}XoRf$B@A!%N(qR<8zclI)C`>|1|(EEU4(z*ueEFMM^u0D z5gpJ7#Lvl)*4zKsSW{3ee{Njb@MCMelhx%qwx8wqQiW`Jp&z&oIBM5hh4CC}h=O^V zbWiw6uoELX0TFcAq(cR`{8+6B#-xz&fX;R(mXoeDpd|@;%}S_!+9sVXse z)&{^Lf@x*5*Lv%y;;&>P97r;jvEJ(l;43CI&6wfV+VK>EVO2~B<_~o`JY%bCECp4? zA`tb8uqP)M=-nyRq#4nD96-^#higM*bfu7WxC2WySoro(NkR$u`(rHBg06QgSuIkv z|JU`_H31X!OzZ9+6K4u0ZCi*|byR&sh_;rx!_tN;T7}0gHV2OIV1I(HT^-F0fe3|a zzKN=5HzMiZ8XOwjPojIdoozbtF|zZ5Q@`6fk27k@8O&0#q7Lcem-ZBEMk+!--1X_FlVRUREuT>qNsl35}DBZr|M zD5l>!(c?lrLDr@?gi`H5OaNO(`YVShMxoDsfXe`n2q;c;aGLK)fLl!poKSm%c*fj| z8C_NuF1Lo^i#4HT9l+&_oFxiz{M7cbm$!E!rq$eEmEP_1SO0R`n}6gG9|!iP+r08m z=V($vk2X5Lw#=2$8t{JS=xZnQoWyXx3ckO2*+!kW&2dqUW|He{)#ei7AIUA&#Yx%W zRFU=E!2_)OSx@7i>{wy5Rj;hdg}|aqG(|JXNLAs(7KSoMi|+}PqV7_zX}X8_AsQgA zWe2oc=#}dI-8?`h#iK0}5$TGsw3Kt^Nc?5Hlz8_WtRI_xCF>wm-jg&4r3=}(#RmOO5x%6COu%hIg%iRLz3 zj_%=<-kd1CeXK|_PM)H^>u9=EJYBL)hcA&yYpT30BYraQk>yH0*JcSek2KPdx-$1S z)%0f6>#DbeJ^sDfQOWdY7b%3i<<@sGZbR+o+wYc_8?dfMSrs9D-smEK`P)KPrIrS( znt1`bG4Ay%DkZjGbdVUGPtv(RZ}lJluJqVD8viu~TiL93{&I%bn08u!$F(LeEy@Sq z#ov^9v<|Kx&A;a1(hTl^y{>J~ZT2f)G-JGVsw?}zNHFDiyRZ2E&z!fz-`8~Jt^%vN zpSu8_uuaFD#3SR;%rpz5z+m=GVL*;|?tTxz$;mrty1xFl!*RQbNIb*6>G-G1UR`j7 z4^ChiQ#sV^xt^n*Y1K=le3N0W4L71sQCX`H>w=NazKW*$;n;ZOZ1HJl6)w%#p1I)1 zO4}>lj%gFEQjNRPnVBJAs7)dMeCXGjB)Ud{di9CVlK9|ct@buy+ZsisL ztcT_4+^g=RyCb{h-{diMc!<|#`B#O@3wliO(BatL@-XQVRVbL@CBxtC&ufBXcssdS z1zFpVO!-*|+K|tInx4VNr(6CrbYV#|rS$qZ!K#g%GlO4i$J@#RfsHb`e_uHXiHA8(ge==n!W z>V^9Q@fWiF>X+I%N_HmB2@&z`fP~Y;pZb*=Xlb68`ZW8^lf#nSxLOH!!Irispi1` z*dnx?nn&N~Pk)pCYH$iDPUG6Zv;ap1D`>!Zs*7&)D=_!0})?$=OQ^lLKfzocCyWrKA5e=X+4Wgq;1 zw77iB;J;oBt$kcyI`<2j-V8+2Y`V<+!of9zGdggNvC&)6Zn z>I|pbJ6MX=YYJ&IRurMdo;l?%hn;w()%s!dErgpGZmci}%TSpoFFy$|k6#(aSsyb- z{w&fe`>o$mb7k^Sc4vc2w%zWF;%ZYg*Xk8fn>iG7Ot+c7c$4{?qGer6srhHm#^~+W z*d8Y5yCBrKks!4&xU4I4x6vKr3yB|Y*PJeUp zg)Q(B`74$4jGrEbzA{<3K8#pfShP;=9*0ULi~poe1vDQP{Ms~)IVI;ZgT!ke%AbiI`|gbeL*v9T$oxR|~JADmRSqREec z=|U2+@fVIhlbMehNQz${#j0WxOAXE7J&&6|@c=>!Uy@azUpR##NghU7g;#W?gi52u z)`9^lGapORi*(nf2g5h~C_A$#S)& z?0raPOz_h(8M316!-mmaw&}!0c$x9m6~|hPr%;`%9MHHHuekxbTzkBH{&pihyos_6l8V|B*5nZ|`RDuhAJI5SUS3kcp9z%yC3!wy!TQT~bzDchBd$jQrT?;PKtt0T#9kc9Se_0!HL^~6g9RL0zY@$PT!=k z(Cp8S>%WMGznwp9Mv2J-g15(Fc|N}R-DmdiHm6*&@`3oB&}!DvCGOFv$o!B8byJ6j zMAN?~hxrewGz6aZ4`cf{W3nY2^jTV?+sx0CQ7POilFfyeMZZ;=D*OBZ25%kgxw`hV ziQ-QIx(Tj-(fuZqlJA2b!r{{GELhDJp~A{=4a+PC5naM8H`qY)bXW*JQL|lM07g^!%hq6tHu7;RLL)Yd274zzc_NKaj zm35P~MPuDBq&J37*V!~&?rHQqu(lY;m@@_pj@er*StjcFkkMZ0D~|h1u^$R0k257C zBN*npIqIKq?`|JvMmS7p3rvZU&w;;4+q2Tf9etSIAaH_0?Z$t3U`YruLnEE0%3o5q z-}U#3p^i_m0*Xnm`U%n?0;Pj6+22W+p)sj!p}$rCj%21S>yyMjKN?nr5-px1 zpM2qh4@fmxDp@4I)@f?c`}wf{C-Am$;gwX7Sh>DqlVSuZ`WMT1+7A&dmoGoW*%*5y z5*e9TwDyd?(qpAh7%zvxe1fMM?CjCXaTKHz4*i<>=0iGXfoFp`^ows#hgB@z&_860 zQwl{mtquzc+=hrADuO+m^KIal{_JK{M*$>nl?;Gv^Jpu?f9-I`U4{=aovJ&dXxw}q zU+hbmNj2IjcIpQCAFKvDa4#8L%3ws9kM;4R+xfq3-KGDKJ|8YEtxlZP1X2dnv?yFl z9_BhRZ z2`~kCduBwo#a!&tw>u5o9g0 z-*IEf;zY1TG)eJKC<6RUNQuu?!(IviH`a{J-PJSWV=2J3syNEg6V&vvuHO%vOpaR#JN?4`?r+9yo#0 z)gguv{#ghaBh?`H@wOk_GQvIxeo$eI z-A<0}0G1 zjHV7b(*>~$64Ypxu-ephi2#@q%gAr8O$&W00=dQ>^Q@4eu+e3i1UX)Q_(z!F6lY*9 zCN!#U1NP~{cCG0m%)8c~b46-o$QlG;FH3jqJCvxkN9vun3GMz7G9os1czEpY=6}O) zOQKR@e(q5&6p21?K_4*)-=sVeR)*F(;v~)S@_uP4Z=p`gQRQ@Z%mNGzi(4mVna|l~ zCWgCA3FJC;RAqJ!NFIlbkLvsQbc}{SNzcpTM(^#d?$g#!VoS?teKpu^w%*Y|p783H z%1cI>g;qYNLK-~gvcjGYT_omhfMOcXf_%H^8L64!7vqM%+Sb^=+hgn`Z8Uwi7UFNf4242>im}^k@IcuPJr|xpfX6Y&lRj#q3gIB1VdhIEoKaN z@r577S52Jj@&e>t`@U)RqZxv&BN_Wv^JyQR3^9^gz-nqA#X^Q@90qO-AS~A12D{vx znZoJc`rjO1v}B+_%<1xdstxvXj6;)*#@-Hgoe}bE|RhDRCWjarWc? z@fyz$1JC=t@euhzMwF5hjWTM+%FY(22!CQxR*4bv=*5|B-lxe4DpThm z?d6#F!phFJvM{@5#Bb4r1>-dghk79sWAv8#t|S_dHRAlRq%f&iZB-UvK|`w<($A>8)iG#naw2E))8#xZ6j<su229Th##3Ygh5)wZ##XbRv@OI2_ zAs~VNh^dYQBrIXDoaBJSnhKT@43J>Z#tP;AAkr?8oG@C3;<2m{fLHm|ZWt}%Sy+=Y zpsS-uj25bWtR0||v;Z+Sj26OcEJnePs}?y{Y#ulu5zK=<#|+8_cxDA#C)t?37}}7L!hFBanf8L)g#qK*?@&oLZ1>RYO&bmOxS*3`rn6%^W8U zB*^N3vjwsntpkS(4cH_zffHd3B<8trXFzu=7R3$b19BLAaA81B^g-HTv`B^F{s6(U zGlOdl5>#Br&EW?M{=>oJ2Pvbc!*l!o!AZM(7RGF8PQ|;&0=Cyy;q}@B2}eSFLJ)p& zboi0RKn_6!zA)$>bvHB^E%wRy@=8E<=MMe}6p$!C#BTt)-eN>cumI}H`I+E?2gsqe zCt&#hzGAjm`Vd5dJi8tus7C>|mo5=RSOE!kVZstbAh9Y>xWx%1I{XRcL0H2@5Kc$~ zIZHEyC?J``b;4V9AZL@62nBS*b3q~j6(ENxmZ%?u;$=EfJ1Az=OGF+Z6Y_Aav04Q7 zh@ya}aTLmBLWDfq!UswJl%WA4Vq0?g;GBD4nhPt>Yyg z2TX+wlBvws#BFap)l*gPh~#uXewBx%)6CyY|Po*{@kMpZAv&kw3WMb zble!q^2+py!BXAm^<>z-^7`5y@UopbIvfXhCIKEJ0fr;W6|aQ^2A0e6f6tLj7lIGt1^%iI7`L{Qs2EvrY#QS z;EAcr`X{29a{_(6^U0-5&XjBgO^N^9ildO(>YE(&H)CBPM?-~!70 zm%*lP6yZSje;ND^py&e)!~R|hLD0wnAElrG)dXr-N>Na-tuZJ~LBXChp{xPP_}Wm` zfS_Qiqof4gL%p3+4P<>OJQXwuijUmJXz9bCx&|d`vo2LKNKoM`6)LDK8KqNUfduQ! z=`mWu3#bItfL0IPQ2B!VkbI}g3P3*RgA>%sAZ1uf)Qmuck`lgS zv}obcoMQszq?u_s;55A#2!pm2`g2er zs=#7k1&xVyat0ev3dtBS;DTgKEf}gmfTCtGSc68AcO^rmB~TA72BR#fmoq6Nt2U5R z?9P}2bRrE@Ms-3N(Sh)#I?-Xa_>VHug21X+U_1l`H;I6W8+0n)1Ot-=h{Nf`BnndK z4q&nejr^lIrYMj*u4_zcpx}(6GtUAmLRtWdC`L;yHM0*ems*%Sm~%ien+#w^0Y)15 zl)!GenP3?fSo}dLLcqh)fd|y_Ta`sw=YP6lvH0H&aa=@3xR@Z zpbL+PCy0U%Hb zesL(W0B>z`!%+YV1u`_}wk(iysl+)A@}pmuvk{c99_gHlAcKbsId_21x&J)t+2rH^ z3jT-pr@x#wGQj?BY+Mu|m@|2}{wr(j0IqOQ|ISFR0S}-|0OaRjPz8WR{mcM5mhrz{fyShY^mJEk<2?moB|OF}1**DXRD2vDnNAKqvG9*x&7FKTK*!P&$`vtM z21fXHKvlJrj=v9dKO1g-V^d)Jhc1kk%?$o5;D~PVsph{1nc)Z{-~a-D7gZn^1ZS|W zfH6_XHO;c}3A)+pg2Ghh$VZ(GG=g_RB>^DL*HpYnWqO zk6FbuRvc+bM7yc;N{=Y@9TJDR&a?m=X#-TJNT)Wv7Mzc5Dw8JQ#d_2jY2zRxLMZLc1Fpx>~ve(-C875B6A&2#!pHq9KIgz z48gS41zf8XrpU6(?3eE*z+t(tCVV>ca3k6FN5Jdfz4(*%EAHOywT~+|lGR<&xz3UP za2%Nsu{NYq7>g;^>eDi2ot{`i_V)}xJL637_bz0>zxJWhRXofF8)AM$elT@Irq8Hv zPx?7bJ;%#iQh6C&dp1wxET4XGB<%b6SK*Q}bU}`Zv(M6_Hx#e z3uH~_R<-`i9ab8F!o1{mB@4Kg=OIO}ZBHXCROy|-#SRY&aZwz<@ZwTP6=Buv z;9skv?J=G)1q+EO*M(K9YN^r?GKY>=viE8g9v`U#8%x)w?i?&Zlm7>+KvciV5w0bN zSe;8+YA=6{KIm!kl&5hkJQ!~oRf$XBR(lUfbdK9zk{Lz7BBQL7? z9Kyy)hBBd}Af%(Ft!n5~W@`F8r(E`Mjj?4kkcx~j+2Sms>Q?-Aoew&(Pe?ITSLb1(9r$JEO?x&jG7QfVY+ z7SJp*g+4&W;`0vkMd{}A+q;^pc>DHUC;V0}e8QnkF)fx@tKyngIat0G9jal*zXjuJ`fdZqSJJ?CSSK7dGn^S5XyTzW(4l~` z!ez~*jC9;krZ{yG(`A&FDQW`x3KddXbGUcZ^M_mSMijorx@1;-Tob}{|H~A&Fhze5 zc6;kT?DaZkjOlfa1rkh~^=ehs?c@DpP{LWMO(KQ>A)bcl6(NF|pn~^2CM0we*xa0D z&>y;WUKSg#$K-yCDSHOtQ}5knF3G-P-+qn}7VSYfu<4#4J}#S?-b;y6+tvFb19E|0 zQPj95hlTOwlfgr-etH^P9MOeMH~rZV@7Ej`$Lg2;0{VgSh41AjJA|0i2ud>tsG0-| zP7!IWRH)6E^{CXeh)7S5*Bl!`W=CXRdnUOUeWH&-yfY~ir&g#g2{D33%OihJ1h_{> zqMo7ukjIy1og3V^msR*mm~BR#D=XBndApZI6=%dHtUqO7j1j4=7S2b-u#UpQ6Hq)x z;mqR;sjjBT-Ho4HoiRvRZ&6 z4Y5b2i2c3vAO6WykhqA1dFOu^>Rsl9&@PyWrU6tsK}a+kk52sQ#cv|%fi-_u;4;&^ z3~lrLre13cm00ClJPSC>ErTI+Z0|pucH-&dzAt~HHW4m z76?~J+o)!Y7txGv2frzs0Q0$9LbYy+MYrozenI1WE9pi@)N3f*PPR17I0Y)0AW{ew zxCyy~W<=Cj+hBDYjZB!Tg65-Ra5-Jo)pd=3z0SZPBdD?vXqXbiK27h9giaLyd1heT0Q|=uS0v52D|$pe|r} zJujPC@wuvFS98P)`XM!}(66(-KIbMoKAS&(x-5R~rpg`jX6ABtegW;QirviJX)1JE zfG1Bc`eigIb{DQ#xKB9qB6qfM)&?#=E{j!wXy{Pt9+i5-D)OP=J9+R=0-?s_ zR$A_=8EHbqSTn%^re+eoWXxmTIa(23#aL`KUXRae?J>n}JopfycQxFUn9t_77wA(> zyB%1326V7R*>wG?-Hfpc>sQB4n9%I#b?mv{NRE=!A!FAhzAb?4{3 zaWaE#`3s*0SIO@(}%4cDD^<7-wMk1BefZ!VvXp`fFktbsY?L-BR;j)Y}2mmLsI z;+k3NWCWfBu~>aYCb<>JKbnnyuhy44_Nh0iEn|j^`_9$4^lzmE&0cQbtB|QfS};^f zYGdRocpakEN=A3$bon*0TS_;H(G4~gS}fyKs9xX_A}BB1{ET|OZ`oL z7pj6f_h0Z?7q_=Q^5bESk=x#m%C$$WEr;zZM)i<-WMqaqOM>K-Yweg3(h#B9>s$GM@o;0D5B3GdFrjf*UP}x|CzX=9L?KvD3$OyT@j;E>*LLy6 z^E>l4-G!R`*ALZ$o7+8@op+-+*UQf(%;W7={2iO9znt+o-}O1+l)K={-nE(S&g*)| z>qxa(ph(1^8YH@N&VGko8et!z&Xbj-&0P#6NstM7g%X}CLh=1 zSYfh8dlupY0+HWWv1}zp4)gO|2wl z$cLPkGs7Lx!YVIA0?G{W(hJA9OY+De*w}8#!Zk>q_nZIsn?LZMJ$XI0e-iqd;u*q~ z-Sw`B*z{5!eBfn&cS=2e{OdA9*!}#qp>JG0Vj*4Ur@NzcYCxZWP7c}Y9vvSv$X@64 znY>~Gu$qyX z_4ga+y9q|H%^N+_;$mR;}z013s$F}q2Ke-~Tn-;O|lYjAKfxm7}?Xd{PH1l~@w$Q9{ z!S?i`e`N!G$%U$*nN@Y0?`~!xi>zPfc|*PnHE+5)H;4HR#9>MM{fn2=SNYa!^QSI7 z4Xau6kOt7F%%x?LNnxP@`F^86iH~63^6Lo zXl+u|Na+X{DaD8tF4|}Go$T+|*Qxx{`Dk|aZ5Vu`ok+5G@IKs&$3omGVF`kd6@g2h z(&RmVkVw42nwCpxgMaK^b~63z|TBx-kuQF zfN@+f!0N&%VspXgu+ocCQg2W@p`n8xeWmPwHJTX-7&U)#$mHm_aSc72hujzo$iCM{ znrY|RTbwxCr$kUC5_6HDb)CoRfD6v056Rp7uLHp|BFShU{u4X9v-tb|#>lxjL>}JK zIGRIF-XL{ggbGZ91c{P3IK&5&i4lZqCQKkyCCapZWN>HScbNTuDKA%@iuoo1edOPN zvT(b&e3RZ$Ia4NB!B$Z&bgny@Z|5unSbqu=fBT({@mM{L}4nzRDS$7 z$IC8+vxuYL#3Xf6F<%63D(Km6lD>*Of9ebGm_9n%86S@C?jJtdKOD)2RL30K#@w%t zweg{c`-k`U$M@GBdbhzte@|zA;>iEpwK+J`D3%|e$3ld1yufq*!@VqiZRos6-)D!1 zPKPX zM4>a2pQn+NCGx9u$e!xGKGyGkgNOd@Z_bHGQ$IX+vW1+L^Fn?TG6eo_?9m?dF@^6M zJoHU0V)4(+PyAFQN6vp7|EDt=?aAqQbPDqM(C*OY&Z8uCVlk1IFepb-0{VoPgeXUL z0S}k^C`X(E`f!(-DMw3x>7zpm%$^hb=d*NQA8-qRL3zbSTq<=rS^HDK4 zdgvtbBv}CfxtNKNzaZIWI-`FZ_!oLUM(QW(O_ZgJEZxk1g*ItOqb8zEo`#Pf zKk{!^6L}<`{i9^2ku#Myn?FPo=_H46KFF72Ud0dW;l@qGhJ5fJG|2n+YNQW;$hRNV z`26u2%7{Oz|2uFF)cE}I8j1=zhMJcC)6t@PLaThhAG4uU_=A@4K+fvJhrJJSVEF_6 z{NWG&h)uYD(=-2nYyK=LBhuJE%ZSIlau@XIC5s|UWS`dePa?+HP-mGRc*FD9^#V~f zql(WMrql}kiy%9f0>$|ke|Z{SDc^InsX|Ot|I~{uRT;}&EF^<=X_3Jp8*ct`NXg5G z^7m%h+3>e$7RDkx7s1>Ohsn(KqAUGNxx6?3=DXo&IIbaoP_pEQlE!BC(FSQ(C3Gex z7fE^@i29MO!hj=ZD2K3dN~BId>EmZzo5SJZaCEm3iT9dWUK>dKlf3{| zfwkf3%hkT&j%^yqDz|F%-u^7K9%odHyCU-K3iEGz`{3C?D@`13^|=JLG~jLvx+ zWs9SA-mE{^Q=Y}6lJK5>+COs>k$-L2^-*r3RPEit_eL^Q`<;%TJlAaewL9*53Y84H)beb)WtW`4I(rLCjwrnN4^+czi z=D}8vEL)rZOjB%eT)BF~=bB=xqsmoA+E4O4b{8{$vRw|leVqrNCVph^ZeQ=gr`hJ% z-fifAx^z;Jq%UeF`CAtHsr+-{ry{mam40F0{KCGw@Yg1*Ke#`X2J<24n7P~3Ge%Q- zn}w-A7q3HU7_^;_2&G-IuGn=kr6wjX-xR&e(Id!Es&%1Q4j5O2&m%8u;HHmpS(1B)3n~IIBx!v5>%(balReFUt@dIRiYN!{0UM0=DWNm%U!DI1hG4 z58iKfl58B7W9sqO?p_ndLre$oz1(Z+^vV+PAMYerdK0+mG>YedZ{KX=FGj;ude&*BBBx1{dYQtE6 zt$I#e?{e}VDVwz7~dG5g}-fyY` z<%6B1?&RV$b|>(NO*NF#h@t1k-boq@cV5V-sT(A~=uKG(U!l0)kIVdiFD~=@O*lm< zkO?rO`&@m1@>ZUbf-1pYRdba&Afb*OuFBMVE{YQge~xsK$~29 z9nSp^HwO0OLDQ@5#*>+UDW15A_=z&B3cZ6i1Yl?nn%;Ob@YBM`%ZCmnC*=>@^s4K~ zQ1UvYGv_Di|MeGI{?VILx9;d!jg|-fFoOrZFoOq8m_eL{z?o~9y5%H>$-fAHr74nc z`^j~ZiuuqF`QvgOQX+KE0`XWXLa|mD8e2jmOO8Sl2GL;io9692Qi(hF4$FxlK_SF!x-_9?7bEn=}IPL{ zCz?7`ezV74b&kvG%1>vKq}|=8FJDk<`R>zbKBt`Im-2zC1R`WqWk^}zsheCRl;rM)jyxLI`)RaKIr39ww{1@S-b7Oy zTX*zmLq2&E%~c-w=fX{Yvsjv9>;c;7up1w0PuJRfWu3>KXZAyGlIsLg;bO19J(+96 zpo%Fa?xkEZ8qAEVlj~iok|D=rXAz3S*J`NvqCvlV{j(ql1 z#8hY{Eqhg?!9SPwRI#pDm_0%4hOK@oA9)_d{_jFnEzI5cLT^2Pe`pSiQX8&zHp%yu zF8gwUQz`Zm;+Mra%=yGj%$+llN+!1F$g$XDa+sA~4jNGs;D?^CN)Nq--3X zV}8>Hk*MCE#=f+Lf@}V89F6;>shqu(dO;$^hhoouE-n%&O5`e>E3F|ESF~YNphCyS z>?EH&j%$B+Hx_4qv5=$54X_2C*f9$D&>1|XY;;xgrhbvGkGbTe*ak_YxNu(2XQE!; z)VTd@&_H>R7gPrOrIahuV z5DI}A)tSVCB(IzAgGM;`NbZ!6d5L&YZ_JlN_WX=ZOh3OW>LRIgByWl|@Ft3R>^Zqq zD5=o&Tl`~U&#~CNbaIiVN-s*w%jo%uB<@;Lk;o^1sY3KP@-n?tbE(LZT18Tv!a9yG zweKK0j{s`h#Ar7fFZN`Ob(`xQO@se*4o{_<@Pi0N>;{GQ!Cxh&0{A!QBk5ru9cQ1A z4YY3N8q-;C9-jsd(>&J4XLV4Ae#7-c(#E9RG$qY?QS<>!uH`R$%9$x?(Mnn5Q_EqN zau{EKUdk*~NG5LJr@jEJG*&jqV-k{!<=)5#U1-rld_k_2R+7~UWwA1EYJoa762{@C z{HJsHppK{?ne)jXt6yIp(-4-|j64tOniVI$ykn3P#GYVMchOddRi}seviV))JahOQ z|LGi_Rva6(-u$sRyo>*I4zIbX%6p?9m%~_ppfhLB9qDR;?0F&^p8liMNODXnWrWaS zmb`N60!EcRM`W|b_si+8zx?Vv$y5^UL{McXe@qS+ktWwK$G`sa-@iI1+1cDrou?<` z(cxX^#T#dEc75cWh=nsAJ2V{Mda~!6Y_@ZLc}BDUAtELE?hS{*b|3|*|U%lEtKE44tZetjj!xs5ZXZg1D0?T8hJkavsxJeRCd^w7zPLqkH z2!$@cjxg!mkN}IHo&G~KI#zlv@OV~ET)!SVR^~3YWgHHnHEylnE1g^a z*i9IlmAw0|G;rsNcfV=9BUWB-p?K@1ZmD{+vUq{Vb2!ZHP`z0hzrf>rkG!x_crg)g z&&lm>jXs~>l$CMYnW$%_;R286@E5~Y05N~eO1K3c&*3F{7A^E|R_ZM9`2Ibp_T<*? zX29VA9bZxof9S|Q9B6Wg?wyJK5c6Pj#){k{VL*Pdmd@0o5d~3 zewX@zpI+FcoTsWCTfcdfH4Bso5cRy52+S}aEY&k2%T)P5b?xKbh%v+UFmm20BxU@ zfqJ^E;nzn|9WHk=k*lvRfy!d{V~v0ESwK)Yu~@_+5vGeKa7|cQtOI{2mqLLK5aec# zPpEK~)m3NtlkrOa+0XKHNExov&oSb2Z8O18XDy{d4k9%R?6+@GaQ&!mE4;l)j2Fm9T<6I`P8%Wbb-fn z!&@C599B~9s8^=P%FqQK&u1=bI>1Q1`j5t}^xLkF%Pr?K_RL;JiRVUE!%FDo6V6K7 zg%nX%hORpQq)$C@L-{{In__=u>;jMHFpHb~K~JMB@RWU_<_v`^$E?&|;PD)WqNXuc z)#Q(m^6_!MD8*wQOmXi!*LP5T%*y}Ojx^n2N4e5mjVqLQ+)+Jt3Zq;#HJ~OyyL3;EUmP-i9Q1y%N>yP@NRrPZnb0Q$vTD8@m%p6{MZ8vY1tq z6SF`Bf2q6d&@!A+Q?!3rxZX7#?ko}1;>;n}Tzt7qD4~`!d{EJGzX{J{R>E`PCpK3z z_Y^1cB20uiJqCBid^M3P70vUn0Cw1Kdh?i--fX6!@nijP5@eo%W-IxVtM26er7wA3 zxt0Uf1P=fp8ng1GkNtB$$IT(Gsv%^}`GrRBJ>tm9qQ*R*tZaX2;PD);*0wNv%u166 z9?xMsh9M{~E?xi49p*QW*J}>Kn1#;#*em)KD*jb4{`Wh<`<)zCNVC22cXImj>nk@Y zK_DP^tzX-bg{~X`a+Q^T4LqL1C|X~$-gB$RtlVng@x7-Xu#&0`t59936sv$ZIV;in zrt7S)?4}z{RLXy^357i@U1{V_aQM$#;U-adq&s|XAX)W!)LQ3Rl!ZtRLhqQ$V^&@^ z@OWmasY*aEY~@(Yqf6EMtGdPj9UPAIHXoJ@%;mr)(d3F8uzq+MT`Wz9MJz6TGD34J z8rbW8v$w~r?CstEkruvgwBYFdC=!qKB9PiDCw-Rrf$D#J7`3sW`pwcFv$C{H8Tl0p zskBS6z(WqSjU=P-)4*X%AUl^b|Ghi4d>!M|O1S;^eM<2lSisXuP8@p`qrKX+NF z-@xNJtOS4At6s1FT~?mOJoJATh31Cbt-h6tyZt6v z-(@9PLla;nQXBq2HY+evzbt~45PcJiFcvv+iIyh$T~_+@(j=FLcTSF}JXMCIdlm@b z64=w7kqney^9MbZ|1S2=GO`q3xeI#ka#C8;-Y0)A@SA(- z9+*3QAT=RMPJgCC=`_J1eJx3$K6Izo3nIaMLX%2%j(%CGzhbQL!kt{`7Ueo%fAd-% zj@DI!&Q7r9;hgj9&lgdgIZD7km>%n(%+>{C$tdB;X}^u0e=-Zyl0V}1^&czGg)5` zpPEO`)q0dZ{TF}I9G2zC*CO^WDS$ooLn(iJRoB+E{>+W;u8-U+(_$3}(Y&Bz&0$nD zh&xUMZL!wsyM)#j(Cqd!^P_oK)G_>p5W-1a*J+ z$}&8QjhPo^*bUX-X6y!c+NNA_I2?`pCx3|ULKL>AbC?p!HdxU7=1LlkLf65$h3~O^ zJBtdrMI2rF@|xW|9lb1s?*8`{?nN#=!ikd3*d-a<-;~S zn;{n(fZTGG_rG!12V!_G(pSX)&c)ykvN&w+4Cx50Rt)(tnLpGleem8i7%X=v`sV!( zGG8_~wGvWD`S&}{xB91Von?QJQ61ZQ`Yet`R)JVfUs)6Zt|~6ObT{%{VvueDVy&u200UFU7d zO;>SnC|z3kqyw5nHmT(4SX8o7d=@%x;JZNi0gLO`X?m8m;4t%w`)+^j)`RZ5b&`0F z)iw8>tu%*!zhxfD>mG}ILAI;W;`2@Emq zBq`gkTw}&r3tRe4hVNXQ+R|Kan>Y=l6?wV`DKM#IWZp4m zkcCBjcvuHCXQ7YJ7FS}|^jBme)AA=^iP#$H4Y6rjk|HXd%rbg+RV$J$MDg<__+||Y zpp3?78pgE@#pQ2k7?m z(b)THSxbL}ee+!>EIhQj?IKeXnk)UluMK|LGil)_{NbhN)BEjp|dUo=V#%zKw}fUyDrH z2k&c<>0hqM^z+t~+A0^BHKmGwEc-}(?)p&M0C0Wi3UB;8)uH@)z0QlRM&tECfMTna zqf*pSdD%o)ZW<4(G$xvZ&{#-oSv;kk(yA4bkKWO|Li-K;>$Mqe)lQgYF*M2>c-Hj_^oki}HTqb!5;RPEG7G3hO;cEa+EplT;5 ziHKfG3aYbK>x}QDh}G$`&WT@mnlEyLI;ZzL%Qi4-fxcITH?7N`_{FL9CSoTArcSl$ z=&6<_Sj`hZDT!xxcTwjFl$3R77&B^$?lylgjE^bTNqn`8zXZ$pEBw+|%a~^wcYwB3 zF4`(GC(9|J(NumRmHyP9WPuwufo8BF(cE5qrBxPsTi})aFx4%|KP$YF?djcD3t0vM z?BgFqDB@CrvpUYAY0j912HZZ@z2wup`Mj~zH9-g^okJ+u1_2?IRxi+?IJsLxP*Q)X z33{bXMnaRDV^dN3uTW>1w*4EQ5Qq_wDOdq9Dg;d##)#VYejXqrz)iRr$cTPb>glb3 zjBw}R)_{x<-nca&BgBum9U!BcnwXAIndn8=rfAEldE;_*KM{p~*fb*Y6<_IAdmR4? z_)04IN*y)bRY~D2X)OW5IzlsSn)`nNUuUZJAkbGu5{kh9q0UOcPX)OcyMv!XT#rq+ zqdoi-;+h2ThYjf>w#tv6FA42v=Tc&Bhh}QyHMDK~C7Zy3eoMaa!X)^$!us zs-x);|LJbMul6>2X)S`VL*OTil4+v*6G0{JYNMAc^*JRoJ~bIig}A@+o7d4`+qDa# zcN6DEBkL{W++cXU1GR8H(gMWXTeKPKR+VcPSl<9vN*r+F27!|Ogf>wLd|!y`t0?wz zuPH4>lU#C3ES#s-0lDNXhE$G)SNULfk?>CNIn4&}4>~;OKzF|pNv^^^f|Vwol$ z#>&q&9qi&~6|zo*8&7{`^)YJ;Is70NKP8zRqBqCAde8^e6NZGX`4M`@gst=SHi7GA zr@V^}NI>YiyZXZ}V($=a9)JV%Tme-R!%uPznLOs@%c9NHYaLhvz&mmDpOpx7WNs`# z0|NiEDd@}qBC=3|FfvALS@}7ZAVrA31B%e|DnYac5?8Q}x$tz+^R5PDTGQiG5!a@|>l|&8w z1z{;b!S-fI5?#jItH4}tm~4jQdcX4{CAGM*DV#Hh z$njG#PnrNuSmJ*?Xn3C7tvZ1)r}yyt{O1WB{9)q%E(Ukxhu?m?)h0>wlFL{|>IoaH zjfEMYz(Ok&_|CV^2pJ!Z)32?-un91Xg#aWJZy|tA!?{QY{v8fj$T~ex%wFAUes~(i z3|giL&;l@~Yl(;=e75IEd_GLe`~ohs1ZKryY#rto+^>IkVw1Q2%XMP6^!K8P2QB@* zx28G_N%Lk&%9T>0N}G0*e(ajW*l7`P0uqmTO{w@PrySu}@tsz$UuV8kuB`08XpCOF z&YL_V-!+i-H>Bk6nf!hFt>q!0;Nvt4@}mNr1$Of(i`%4>pG}_)$Uq2%@Pu~*;$zxY#y;RZ2WkYlMhT8z!FGQ41oLbotsO|;`<>_Jp2tFx zDvjF9!{K;%xF7g)X)t>G`NvThTsz7};^*wNu}~;Gmh9O)V}VFjS4QbQic3+9Zz+O6 z8rv8#L?hkhBek!I?qRaL+zlvd>z%hzM6~1-sW5*ixs*U!P&+55`IrOJ?NqoBVy?VE7H)GsL7YEE7jY6A7&OA___j)+9vPdSm|Qhq0Q zlKyh?I9uq>#U1BB75oi|2&qE2aVkHO8iW2oZoQn!#562Y{~Vk_n?ezqK^l3{kwbr0 z>0f_RN8f?OwQ)ufah`BJdf<_h|FpWuXV+#$^Is?to__=q-^P!niKkMBqr6VLIKcXS zk{7PEKg4at2|0|9wA*+!RQ$dAI9Ud2Dn+2>7$Hb|TQQ@XN*h{TMx@9Ja6MSya; z&*SR5+rZUFCc#%%-&a@PZE*Fiw|dVp8kVK-(`HEwe<5#Q^#*?N-oCXhEjqRJT`Pa2 z$KRCfbSAWmOnA4>SBJqWeD%`x<)v#|07OImWxRCi@X;SlOLTdQ7^`M8w)T1%Z>@Vkpll z1HCOkp1HQ*C#TU9K{N^gmV>Q(t)qX5rfz&L(ib46D2IXdA1|%1{jk*N0GM@eiq0SE zbd_vfpdt!^r89V*4g>|WSBzEw|8mJ%JstCCOA|is{({WMROpQaHvviB7r?9$RK@HSmMX&< zez-mjBrk5Y)3u&SZ3UNQbR?&(WoZ?crvgWV!%I6Xt@^IsGk-G6QUVJ20=@HJb1vk= zAMW4%OXXY?FjXxeJ8x}j#rkFY;?pZ$oAinm)Yd%tRTWv8RcVS3)n|X+h24a9Ozo7h zTkqVejEs&<>Ne>aX`F4as8yZA*Q|^$J}cw>4)HeCDMnr8FuKC}thPzbpkw&CGc&C6 zw!6#>{rCeVa?NN*9JQq_8Z z0;9B(%Vq<)yFH5ib3b%bg3>n)|Kva7XM;1b`~l=#4iBq#kQEt_Affs#;8u;&!gLas!;4&O2tg#UEJ zjUG@C=pV7WIF-k1Kngkl>jhVT6!;7(h6#n@v#Ru;& zpTn}DP%x2_V&vo=2mX0Teyf4hDTjZjuit!l`{IWmPirkc3mJ&zsmM4N>C>4Xc(Div zcZRO#Jr06_yhrl(0BguJG^o#nvkVJopII;3%V&SjYwwwj z3WSqYZB~s{O7@(A>rLm2JX~2Zv4>Id?+UEn!TO!u7W`_Jwpd(>I1vL$JVF4>HLL7O zZEb)O!R48JX2nXg;6ELNyiQU#Eh|rsTvT#@>JLCw%I0f95-N-vlF}KL+8rv7*f|ya zEoLP~@So1EE!e!p$JvGGe2ae(et7A|j(1iDobF(!5tini4YfQ1#zQ!mIosYDFkZ*Z z%A!Nw<1niRk8he_@vzRpPMH9=#JB$Cl{#8uE!{bpEXF?I3eSVu%jo`AeBsr?!>3Uk zXNy#L&*dR(QFZuNt$?)B@*=!+1K%@kAX`wv(PeI;-I zesy7hxD85$zKpOq7Lz1ng2XyPa z3*7^Hv4mzeq~}==1m1t9ySK_o#FF$y6nY|@AaKIG^fe&kgu_Owu^8IbJPcF1sYo=2 z>+h;o-BwaifSO;n{kPILF^Wm=N%Y@1mzHaeT_#7fa%f3lw|?fADX6e>i(s>rZso6Dl@d61FEberX3>&HTxXO(Wl_zUx$8E34$F zOgHK(+7P3|LK09pP5XEcf$`1lnmwi^3 zNNyn;s3)krDmz`9Ze$^#^P+IuAUzd@+Z@PXQMd{WD~Nypf$|*a1x1o~Ag{dkS;&)r zLN{TM`NO$;A@rO2=<2$D%5v5B>!r`9cyMr%iiI;CI?tnc?xscR<&__L(G__mf+)Ih z+(a723o)q&Otlb(RB9J%f9j`!7`)$kDRn%krRaS`$18?^D-!>A1>&O$U~9*>c(oDT zt{DH7ADVwOrw2{aoNNi^h&opuU#EE8Lx)H7I5Ye#xj8{$c{Wf5i6EJX?cIa+cDL<8FOythF%~Hp+si=Dy>(u zK0v!W5%NlvE@)}mbZ@dB*oj=SxancFEJ&MHP3;aW$~^hWI1dn>2@KPJ=GcQ?Gshlm zBZ>Aqz*2n?`l;^*{_lBTp7=bQH!0?@02pi|8TLCao5AazzXMajly&9Hb%oMyzeCuD zcC>&0@~e}IWp1nXovJVH{mSPe-yvM&T%>QvJtI;PCxbhbJ^I#_%H}YQR7&lD2n1N# zcL<-!<30I;(Ad8mB1-|4nU`Ze6%s}W35YUQiThMY7$YPg+83$5m67iPBR}LaHhwPN z!(OY99&))B63coBU}3DXe-qu<)4(DsSE7G_LOG9xAQg=t^~=_#!lHRFl^+N%l!U=@EJ zb)4F7n{J1x{g$V5`6E(m{Rm)nWcwx>frd=JJ!c_eN+cwoG2tYUAsS{2lh)=2QSM82 zulZW~BRcOM7kU&2~k#}}2Fd(2u2%pLmM~C7Q84bYI?7vOZ z=#a~bFswEpviX$!G+KQjCQl9}%J_dwR7#~1MSDt<(ZwKTP&b3;M)yn#ZWa5arzppd z`p`|Npp;O`rda?WydCl*oU)rx4_WZPk|lIzXvm)=KD8j%zj`$jjQ z&NKLi!y)948yzABZIkeYZ7ejFpwtF+01+qb=y01M1KaqW#0=a}M^Mtd6}f-fcW~Fy zm_a*uHa_ZPJzKV7NFpJD%3{-56W)?p>dUued%-oh@_hJ6hlPr49h1WffyW~(?%=>V zeSQ4;$e}C;otrd?<_jrz$V$BO)0vVw}0MeI{DRV)?(prDUh^?_QLZnuU+(~_66 zMG+{X9-2YfMghA)DQiJ1FN2fPmLP8T5!Uz#YEm(Rpn>RB0$VmkPq}YZrwHpz;elQS zpuPpd4WgHu$k9`0kW=+d9)pnbkUJ+zNH>) zud&72jEtaSh*dT1U3d|e(8hIf@Od8rIJS{8J- zL=7i|Y-t)PJeb0ka!HWj}_@r4^l8P&_v zXLOvT#*<{Vg%lQgx~(;DhhtqSHP5dCP|Cp7PNYtI{O&)WeRzNT_J@;d_l;QmGxN!( zqKy)@{L1!MwW6-)F0=|yrAm^zsfguMwcCYuMS~hp;sk)G+YX^DuTwYKM9cXZT^Q)q zjVM3wcZLU^o4N-o;x$Y^rSErYpc-rnC!*B6-#Ji7zRAI{`%YO@;W;!oqREs8S0GI2 z;E1jwCH}#`{ab%k;a~f}(K+q>V}R-_)Fkc?XO)cgPhi4Oqp=`NuaW%I5T)MBKj?)L zg&K)DQTh5Tf0hIt&>tT@(C7d5Zy;f)^|*;JdL20VPcT`iWx0v0541$;-3NLdfMlVe zhb3A05-9@T%a>FB7+fyCSFcQ$Tnz9mdh)@KRjNm; z(E&cj2RdCp%q-((W!&dJ1sGa?%((@)>yIK>v>F@WUisLBrPOL{fP3X*Q*-iGV*?v)g$*`=6{U+6bmu>v!-^n~LY8}DSEpJeIYRD&ax*;V(sz}Ab9x1V)+b=B z96*Hz6P+}SYWyo@O0Ey15Ksx{FEMu-5bTFwc08AnZXj*aC8{z9<=3(U_`q%4|JS>22C{QYQDw8Zpqq&&~Kxchl>TZ_R$~&fM2HnQok;{ z_^jswvVs2UlZY*Y0HuDb7jPy|$J|};vmN>EcWN_pErYPj_{yE7-MmTX8-k^;*&se={1m@;2P9%m(Xd_aP zoxDb&vYv7BkTir%Ye?=&%L>xRIDtqyf}Oy*8(*xEN3JiNI1KF7MqCzJ$$O_h#tH0B za7cT^TO*I0wK#Eq-ARpDoEh>+_cX-4RUbAaZ(YHJuoX9Lu7$jJVJq?=5XOUpw_+~n z0hEI0dY-B{38`vF`8`S+m_lx$7OT{A$Y}8dBJO$hg;VQ$%?4`ZE6^;wMgG$}SDl{|2B;fARx z+bht6YLB3eV!%D{_q^tLwyZBJdTAT#m)*Glnt*OA1rF4PnjBR&wj_7rh8msT@jdw* zMHoORP#(HMXr&rvg-E&2Idv)#*r4k>ivl{&abwzlb$Tat9Rh3<;Mb7y9W-pbN#md? zRWa&%#cJ_?=FJiTwrxAL&8cl$Q@2ywHm2>==G*`8 z`Sj*flC^eD)=IKZ&e`|5uL_&&D3`jH5}4|6t=e(LNmT&yU|%P;NK%ag z8GpW}B*>H71V4a-kK}BTLnBYQlc`<&{3KBD}|d#U!afxShV7_!sl}b7Ei&YzMjI z;R9Y+Fs|=kh`9w^;Uf%p6pAuFw-& znFS`m7KYKBu)q|8T4R;6T`-s3fPD<53Kp zi3ka{C2mL2c*Z+WFy7AL;vlQfX9M|eTnydn6G(df8l#Qo1rQqH5jB4S;LjNihHSoz(GB5+GGRSwX*O^{DXA0UW3kp>sjf%7db91;( z7r?;$kxCU{+;KOrbdjm%#N^=z^qz1%xTk{AhH#%_TvPJZd4r^1L@Slh3xAGB+7 zFrr4BVw$_Oq%%!G<-6eh;U#);5v@8NRwqcM8nPS{eZBE<{XR>=0hy>Qofx{8o6ZC1 zE3svD`##Dl6=8)LF?6N$){_>QHpukQ;68F*gOxi_QHH^}Ep}@=gQS>MBQ~qQq57 zK&Xs9U3u~A1Kst@+4>~a8n5)st-a-kmXjjCOf%dw>D^$dExufEgqpoV=hX{L)vi>z ze8N*OLO9bPC4s$-ao>B7rBl1|S;$+=E&i}xw`JEswL+%mrh`r4V=u+wdI9<_wAlpITuY}zcSK#>R4VqZh>9>xuW|R0^6^zA+LBRn= z{xoM3aY@j_v@R3zAE10`mnP!!pmAyZrsCK9TU!t$YMQFyD&%NI)PXX741(bYE{IY^ zKvE`;Ch|g}c_#);l78YN`IwZ;w<=G+nYJVqu#tYZP=tLM zua%=cin6*`WYUE2T0OU{>x83de;a<&ig6r8h{&G852wh7+ysAY6eBo@?6_ z;eaUic=J1+LSdrDy&5l;Uo4Duv&RuOO?p0v(>F>A^Bztg)sB|%0Y&Ef#n{`J+XpF- zuD5k(G!zy&O=#$u^Q%KMp7iztS`R1V*{wHuSXZ4?Yk0?@4(dm*{_XIW_=@&Re5G}$ zei4|{?L+%NfzND%gYvT-RRk5Z^D+{WpEKhoIAbR=^rFRCe0O}I{JTJw9;1cIE$k%a zD(8!7u}H#?$`J1MJaiabOpb59T+j=_OR5#i`n>JYa zFbG=WbpVcIII=&iXQvlj_Rhlb2!9J!9qjbWEAzBT1KfX093U~#A$wdXJ)%K1wE=Dq}vXX6J8P3=Pup7HzJN3 zp3x0-djOkv3))L*1J~pGWApe3M8oyovJSa#j+}`Gwi{@pmji1Tk*SKDI@w(z_^Eny zJho5R^y5ydUSo~vtrxdGPHQynG=RQS<{-yFA}*&TS>(|28AP!y2%`57Cu`C$3H$*L zdrY;ZY!j@Dqdv_&5U1~pZEy3V6+?&o*#wSDQGjKtqrw?nL*V&Cj{Ina+t=x{u|Nj4 z8QeF~lhSS#FF&jZSizHlnv3?oZQ1mLA_@P)m(kvg_3XT%&V2#Q3qM45_2xTtlH!M* zousCV0@KK62h)l?rc!dJR9f26vfn8wT?5eY`fOi97)31!iL7rY!J&gP5=whW!XalkAR;<=<{YRb|yk&pPx_M%xA$2cbl(>OSjy>ba zG_kDJBevw3_VAxbaBCpnv96nNxXO^Fv=k1E$Z0PSj4ZL&R6pUHOqmV-&it7f}Z{0BzEhT0gC*cW#i>V`%&2h1HwRFs8@`c8h zj0osC26mS;-CT-*lohfQmnuSabg(MTDDc9DF6@W0UsH&WELj6atLJo~9~lp;mI3?4u%S4#C?l`TD$`Eh`l_olrlhLYi{8lDo z`abyB_d@Gpv=OKO0OP>#HffyxnqvPsHo07p)BR}`$Gw-J5cH>bT{a27w!-&iJYcsN zq&3j%hg{*xsH>6XIET1dzP~CU=+Yes3=7{c3(Wb;5LC0*M$7iHe8VkY{}Wa*`aD3q zN@fg^>uw>!WB)^?Z*abmGxr6iIj%?WfY?l2rYmDPNPa z(DFt7(qq|ifUfX%X4NHQua6^S^%aq8JUgZ6cCLujpi-yErT&4W>k$G_kgLwU1j#h) zlM55h6yXw4+X!G)%ABq!Ne>mr1L4k}p$b6^!W2{^5Frmkl|EWTa-Yk}pNI%*hDYL) zyDM=v`vg;Jb|+;060zZwnIl7_?#UC*_vRh%pc{5Ic9w? z!WC}OiCTnILi8Hh-iI*}hAcin`YUyFJb_aF#>6SkAQYge=M-?O@jc~+lViTR>L2Kd^g;c1v%UBwd$iI^lH^G#L&l~4<_R&q?4 zFQeE%LxoqZU#O=YuB>Zfc)7+5t!;>6ZQiX=9#%wJ8?|vP9zU!=N!8wJcUq6#MpW=t z4He)2gsXEruzUacA7NFN&7h0FK<#biM${0rpdlS~e+meHmebG_0|>~r*J91eGYE|I z?tt9oR|Z>_rd0==|E^e0%C5A{tvm76-@;1;uikG+5hmu}$($^_g)})>kKc7lDu9q) z5|1m_e_^3lwn`4cz;11yNI6vqp#uVde0jOTK+EIV*Has0bQCvS@Lc)&8?={ce*e8g z5PUI0Mn)D|v=!UQk|%@7`|@yUOo83fWMpbme`Y>#NDcr5FC7rRYp*EsX9c&jvRYLxWGsOLc(vNhFb)=Xf zTz4?KkP~(S@g@M=@}%Rhh@+MzdbPwu`jd}08LHRVHFHygICjA8knl*uF`$&EYhoyf_(m6S7`Ky>HLD*!Iyy*?4BngEo;|F=W4ZQ z@XJz2MR=Z;K!Lm-K(D1e6R5K!Oa;poF9nw~Cz00@fi9PY&{!$*(FK>kV6i*$EH$R3bFmQ{0cnsw>m>2BIvx6;y8SZWMeOT(t8tz2c(5;5E-1Yrv5Z4! zL`*%K$#R@p{;pdkk#S-h4|Pu#`Cv(khXRHDNpr~>TIJfxh@0?=BJ>uO{ejlhH~i~% z34Q8>4iyQC?F`A-lE4LL_HGAMMfetLO@J~u0LPn@GbSfo-N|B?cgp&DF_DH)`VvFe z&qxNL8rA#TN_vPKF&1Ad^G0H~7HuChPnv}ahNe=be8Z>+`6w$q2wVcsBNsdBXcb%v zf~6@*!sSV266{w|n%;4!B!2kUR5CNQ6ctb#e5cRn9{yIR7(?w3H_+z7$&N>04fH@} z5F+>5c+Z0e{yK~zfDu%C#H=QS{rDK*Xc#h69$&s;OS)z$vi8Ogx#uKJ?F!v7!E+nY ziEHfVXt;;JVz`^3H~|$~ce_|i4F}i4hrnGQ+dIeQTVfNb_1Z7AJ&7q4h8Q4)V-(G* zQQ4fWZTD-lfsI$eKu$@tzGBdM0o2FebZ_Nd6DvU>D#o{(<)D_ievXc>T6kyFu$K>_ z{oF4C?JtX=75PhlKQ)bp^3j6 zJ8L8`Kf@ANUwA)X7pVzfR>fZ}=oL|Yt&LnFXDu9BNz?0{<~hJhz|b09Irq}07;@2U zF%%u-`QZ#ATUn1l($m$y9$6I=2YOa6tvG#z*2$BRxzZ0_u%i~D9+svE-9$D5UM;z8 zKCxSEDXOTOEeed0X4J#_>#07_4fw46ATzs5qa z|0n2@SxX^WFUIDF;RTClaIR08S1FN)zP$BNBHi#{F2oI?7PGKMQ(`8}ROOe?ajEl+ zNuqs2_CI6a+qVSEe@E%G8$!HOM%7jJBuqiPAHyHsfchy7UT^MqINrg!9-2Q@8(u!r za95^)US}#a=?q}(`TJ+&bdZf43m*%fvO+$UagrR$sg zvn*n^Xs-_AwhA9C>A%pLoMEwTAXo5rmaJ^2c%=9wq`+3CJ$i;2i>%nfjuT5ngHUCr zKpCOp86rh(G%P*{xx$v_N6gpKm0VJBVN-HHWE}w9FbjyyQ%W=YVRzN!a#z z{qB~ffY%;>6cqx~RbtVuhN@7ugMsREybh&##s;SFd#Cv)HrEbn9@iEeWJ)w55nQN1 zcxqk-NC2QRH;xYP$CB5c#;U{biP}c8i{W#LkIzBXNDa?3EMhZ#LYGw3nn&dkGF!Sd zA)k|=OSRg>DoZ6G^;`xyV_GwlVirU!XbZjSG+0x(i`5vdALS3?N7Nq+NgfV z`X0%q`FizpVR)H~rexdh&rc-%OFMYC#w6gf#BW%zfU11?m) zfwfxvm(B9lQ^~b{hdJpE5|V(lRv3T!2!9YeLjxp!gge@|(mmyu4Xl7+s(_S0gTlUC zw4LE7&QRi!U8$dipXX6@{$Pl$4T{KZ%ZjOpL}6&p2?P^-}Kw)_#+E*<@6>$+-K}%SRR1O7ky`r~P z4ILXIIia%UxbKc4$t@A{Edxo$@=s~zu17bX$gzAggMpF;gw7htv)3&a>KWe=v z7P

#2hyh-Z3taQ6EFGr|JoIam9q|BI!W$2(%kDKau7rdDqshvw@DAq>8Cd20a_Y zN@bx_GxSj4a%U(#IWZqBq>B{UksO^vXS-ZDF5VI|1l`lL8)RM3hlCX%$XC1dDeLA9Dt&xs+KQv?G%Onw^ht05~ z05d;&zsUaF0~M%KqU@+Un(~w&?mJ*#J3&N~2PF>8lPj3Jwgx+x3_k1~-f-bQtAdI! z11(uEJ`E2!-=1`+Lh~N#>=9Iof5k(OT=Pvz(T%S^W<4rlM!3Ghw*Ivi)Zmz&*b6!_ z5Cz$yHz!#*-mf z>;9`&y&!*|j*Qs?NkK#o|48d|%nu)&=zJgWeY_1OQ%dAziXVkW_1vhCG)pqJ!$qhC zm%vb}=D6!N*L*ivBv9p+CJPoJh8&XK{GUSad9jn28Z&d0ewqA0Q?PkFeEMY6G01zA>t%sg4{oF=HUl%juJF zS!lOrhIoen1?HG<748E}nR}G;#Z;wq{oo`_llX&LNdrRlEjnPq`{e*rl^)`|aRg{3 z607YbJ))aP;dTf(Rce$bB8> z*!1Q>RpdrRN%<@bSrA)7Y*$oWsjcNWO9i$Ya@wLRVJA$RLy6>lhvD}(Bg~M!($8Gd zhf~ROlQ9Ane^{PV5r}}~#;adqkws3T%{9+jgCg>_`3BTO z+#+BNz1-@iv6_#mLSZpi?dV*C`D`QjjpPEyn!(23Ll6^Of@U}wx(U$-kD0@|!A%i~ zn3@tMH07W)C2ICY%=_r`NLya0lFc?%ztTBjS;`sq9SCk zE~@q$Fwa&(i{Jw=0vUke35^a*=Z#((DhLjRFh(G^=I*2pLD%;4=10&jXsj`u+6b;ilx;V&P7u zBMqNOjY|-&!wx=e%CI@6A413<%{qyOq^?%)?*<_};kdz37+c9Vf#?zWD;312E6jt6 zlp+ALM~|?dT~%^I4CN?0s|QTt+i>GGF-gm~xEFnMy8=*ynGo4_;-t9O52Ah;#6zl+ z^6gUNuwv1JA-E>Op@A0M6D{g5EQaoO%2J;5=Y=n^$cT85PU-$I3%eg03}cJw7Q2qnjGL1(|;{nH*Z-zY@7eSR@wDg#0+MMa-Rc z86=y#_s@^R*E8jKNHU8zCyha54OFF{g9$kYTYCy8fwJQ3uN>Br<4=P*>ThC!-{Td1#p z<4J?5)M&hDN;n0j_u;5u0#`PFTNhU`CzIAp!PV)g;lN!zT{I?s&kENUYdGV1K$xmv z%>_z|n1{qwnEDiZIxd@x4wZdJ6Pu=?>3 z28-YR71J6!jU$`jm+cf3gmxnmRbrebSHu=JR9_R~@q8}7ITj^v`4>80UQBXuk=E*P z*0EQvU^d7J4(nqZK?}+lL|}~42#fn9+5@*Gvgl%r4_5MD-l@_Gkb&|F1f0I3oCKZ{ z2S3wCd@++)+uU4`%%#$bHxGm8>Qp>Hv;)X$X=mW@*09S{k`hZAEF@|VrVh&}roM>; zsjzZnmWecdYfUG5JJoU0vLUZaHBzzfNGfeG%p#mwIu6-c^~IZn$Xoc6+@}C z(rW*>FFw;-w0;&X*GVZ~wA6AFSp~XTzrR{!TWLLze4u8i-BbFh*1f3JRbUn8>zVTF zcl}j;*yUQRtP*x9Rj+3%&OB3{*5w~Dx+e8`kd$e-tBiG(cBQXjpGZHADdw{kvaNm& zvpYGdE`b5hMcWh-l{wSLL%K1)4yh-aI`j!Qfqdy#gE%wOo9$78f@O7EjR5!*@Qx#% z*NLfdR<>JW%(T~Mz(AWTR}F1zQNYsKHm!p#FV8#VWwdY0qJq^{z;Q?S=`_oY{+Gyc z{%5B~g+(Mm;*^>|>#}3vwZ5D_9ntQmY=@SGwm+kiBAxtIW#U7c;#?KwxzFcDGW^Cy)wGnDdWh{(*yH8`>ZRr1nv?b#t_-;KM7Yri+xA##A})Hq5*jp8n}a*w7p%-L`Y()<;mGLZw=syv~q(N-bfY z(N4^ckUPU25tKt11Asn*iMiYqd3HLBQgFoiB_gJ?aC{rQX5LwIt95U_nC@KYys6Bj z({2LyPR(pGC5Rqb3B?s-+&re;e*0Z(hK4w&Cl9XLraiuRpVj0&h_Oy= zfEk{hlq0H0T-5T*9;H|NUuTecm_@%+Ac%)1j3?xAgIkaL@OMTVVHXSb8t<}I0qXlL zrg7qM_6dRMMEk9KYFoBTmi%6>B3N?Gsvq7bVnplm|@bw-hub~;&9__w6}Z#Ik&`Cj9GqxE$cGHn$`73?jHQl7r)_WHI^#Fhg5zQr?tBb~UFVgIzPAj0a9x^3lMfXQzFTiUvmad|qVEY@syWdf+ zxu2J8GHw`g?woC%j2pjBmT80cx|$~CbNA270H@>UciVB9+o$5ah+#%QKgYLo+df`8 z)|8$Rg825eY+Uf|o1pei)!8EhWR<93r4bI) zjrBoa?-Nhw4+)N#!gg3R%s2Q*w439Q767y)jg&7&Dp|T_nYJ5NgYCQyG1t5ykn4Te zF%N{Qm!%R^&M?9uP$!Wf>DgyjR?WsdCcid>{ipFIU&|;Q>QAHl7QwbREc5%v_Vbqc zl_TF^8qE4hbN*YSOlb_adu55R-`o8Bzo&P@diS|)iu_tVdv6V8dy~NMKJoUl0U%(^ z_c+T-XYADuwwIBCxprrIErJ)%VuY{dW)s=Dw^I;<0+c2YC7 z-go=*?UnsgFR5$^cEarEgPK$3RiT~5cvG?WQ8}NrfJ83F;{ktmWw!tdfA`JqZ}YjTVRZoUPI0a^9-r>P@4ZT0i)(9~IhL#zr{W6KzI;RJDr z#QKindD)kHM6-E9xq|;Y%guK`4JVdut3u5><0OHyPW7W9L;@jGagf^r4nV!HWn=J~ zvWS+yPWLty42h<-ubP*m| zjK&MLBTW2^n6}jmb}NL?>sy}L{H9gC_6hwY+~hrxPmqs-gf_UD%5#%m<#~z2D5i>9 zO~KNSL)+x$)+!q-tP|1G4B)Mt#iF$CM%d^`HS)*jV=Wgld`b9?ur6}tPFO`nql?y5 z!zYA-+EvBp4thVrsv!BOlZykLW=3`5fWnT3zT~NQ$i2IG1J9&qKFVX-w<8SI40aF~ z8#3>AzF%EivKzOc{lROu-Ow=m zuSy-zq{F(Zi;TZKZTeWVF|mcUD4XlZv(?oNZ=^=8lqPiYy6aY>wj5AvEgh1DzKm;7 zdR}-`-KJZ-tO8$uD{KNq1M^&EVXeFnrW3Z-z9ZW;Qz>@q#NR7x?qVtf5oi^hkj?8v zuPxNo>-TReS~!AyCIC7ApLND9cp3v<&&Uv4VXbZ!x|oBACtxU5dIV|bD|G#A$V_rI z`wa>7t?^4S$4a+91814+AbTBGc?nBxkr{gWS&CLeatK}|NE9Y147SR{YWl|_vFkST~a_U zUOr$lJN$a7$^dm9(AbS1jX$e7!{T`3vMQ(fA|z82p_I*m7U4l{ocD-Y0qKmmt%mab zv8&<0Ku6o7DJO-R=#N4e%<4Z-D|&nn()^OzG2aZlkBpNF3l~>Fq$h^?(oM^;bVI8D zK)2}??_N0w-&*w=BV2LP(Ht_w@Gj@wY3nIPkbHN=8U#M4RqO995dX>_4f6=<>7+BF zOs4)jdE=IC`@BhZdNAKp)(hgCmM=I7lqh5W-r-<2M;B9@a0*S{?ypzrHE)nziLeN| zK}Qg}8~B0yC6?^O3_esGcE4zLPqHg&rS-JSbEO1O$T3A_G|5_ME9{8b;(K6FqZax! zB6O8Y?SMS>!jc9<=s*ps2!WFCt!ZPzxH zT;RzjB2Ai-dMufCd7PN$H?0JF2a%N%8OYlx7l5JlUZVmU(p)sm1b=o!rkvSS@6yi? zB=ext3jrER% zPZ;zPp+OAfiqoF0q{FPs?dRB4aGNl%Rl+N}R&q zZjOsM!qLy(2;w6_b2LRazzZXwiHxu+)0(0I`*K#+vkRM$*r;M?dc<*ps}@u6mu7AM>6zY{r=0 zlZF17tw>6b*R7wW3jQoZNBgF=*|H{G$!Uy*-Y%-#1tl&nc;Gd?Z{c@Ng(dOR>QjKG zYJ>D+z8xQNq7^(79^E3!Ba&b*W<--?)pl{>59S-5R3gn&E2Syf<&r*G0AMi)`2Voy zh!T~z3-O*0v&CUgE}A2_4V{}&5ug219OvWJDgmTI_>2D5;4muQ$ku%0|ldHrStOfbmKfLi{1-_F8 zTUB+^DoEsV-jR5l#72j-#F70_1&QkM!WV>|3?R$u<#Z5%V}(w=R9!eozb);%i88v~ zxdQhg%*u?L401khydsUR>Hkfh#E*TPk*S06L7Y{&W#JzRW_!0Y%@4ePegOY-S#NTd zE*3He0Z}A}`2Uc>t2#5!tRaA<$Y4 zc%(ZO{ufUWBhCFE4o@ph8vK84r0K6qa|7c}>uRW*)9QH~+N154VeT#XrHK(#=_@&! z6DG5dZu+o4B&o^EG$j9SmkN$H2n3Kz(3LxBl0zhLymK78fCDlHi+Ze4>I(9;(;1$f zW%Cu)na?-hbmVeAf3#OPuhW+(=%Y2W^5^n=UJ{`Nr&3N+Nm2XK_LnOqB}v+uH3A*) z5vi4yojSR$pyN>&^s=K6BSn$KrHb12)iVY{iOBdyYFmeiPb{a0cv@NWt1pF=)9^BB zF3jn(PO!&!HFl+&t$ypwEo{+Z* ze(UeRb>!arNJjm<7`^pi7R;F2SKC`FThc%VenGQ;BdBnZBuqWP;LObYad zzc4X5@nd_EW7BwBxFE&EX0V!kNA_t@(>wr#0zu?)l?y<$)*KA17W`OGHCPM6#2#i% zK)OE?T@Z1Ku9&d|Fn9u#AS1u=X;~f^THN`uzDTf&{Tq=DSF$34ct-zbMg*9Q(o!+% zO42~7$f1v~aw5d6#{I#M`19&#_cDq?+#FIC_|pK{HZ~D{5_Qes7t#y{N(_P{eHK>f z<%#iYx1acUi<#CMsP*l_`_)?9Kgy07a4I`FDC0b~vVD`efbFtf0*WlvhJLQ^D1sKE zV9E+6(O8&COS7=1A-%JT9g{%WX0D4jz52uG-1-0s{BG348ZJiG=r2-1890J;4IRPI z%t(&ppbg{$vMbw?_oJiZi#2x0nR8SDW}Oq_c+_8{ntVm(lXO!d2P%>2&yh&S!YFF$ zr>kF(yWz!7eAP>*p!lwB%=|h!ArdmHF-~PzhGYl}rO(`9pDN6!T> z+fp!x_S;!opgp`TJ#23uYaTF#61K^v+-b$oBYK=nARE=AtGyUDF_^PB&Kep0xe1hA zF?p|+i7jbVl|RFURzraJYIFDCS>$7=B>IHa@Y$5au#?9!o{)M^xUfUm7zauV<091h z{W)Z88Ka(T=J{`D)ybk9KlH4(S>a!H!-#Szm92!owU~^pe|VN`D=U%VNWl6o;eew- zd_tCn{nMMtqNA&ZWNX#Ws`S2lZM^4HAiMb~k>rRa>qP+87(4>V!81r7lUSJzCHou~ zBqK&_a`#~8E)$UeJK*Cz%=IPP<+1Y8b>cwBbjB`U>!P(OPKx?Yvw>d0$SEBu?!N+> z4QQK&-!hV60fPT_Zl2Hwf809~T?OHCQRP_7T>mO}IT}|J*cjHk#jA0QqNj|;yz*f3 z_wecl$(sA?F zk8W=Bo`3C-zk6;TQajfF7{>kE4^j=BO71g*JBRYH5N+Y=D+;V)vk8tSpH@Q=ulyS| zf4MdNyex0xGZZTw7ees^FBQO`;M@;Hv2iF6;*;pcemGl0K44rP<(4t#I>USuv@Moq zPb1oq#smUd)-pgf@KHW@xfZxld(Bq0lSCrueR%Zp7VsbQgi*LOS8emi`{&6)Fbn&q zN08vUBPQU~^5Yru8X!Tl6(wPul1DTU5{`9w1SY!onf(?IsH{LN-G4F;^`l2Gl^_@x zC4%L_5cP3WJT-$KCZw3ZE$05zn4aElVG`Ha(FbTo>X8;6kDVnm5Kx2^iC1=#)NI&nhaZqaAXRWHoNq562q2{%w%{0JHj1@Gn`I-3_L$&c|@5aP< z(-iQpfi}uajh8sE`rmy#l$|^mOzZ>+c4;IAGc%I4p+Apw_%1k4pTtz&1Yxcf4`Ef; zM=wSk%hk2Yi7r%5^QIsbjZWmRAml8L^c03Nh-47ZC{!8(;%9TLWd7f_wPCzppT4p9 zKW>}tq0En)HBHf)^*-ly)37(vc&D}+nJ|F95&^Zq6YlYy6Rfb~!ufaX1(BqA=>f^*uooul&Uoa=xRh2Gd1#-hSLlso zc>SqrE0XiDiZ?D!GIfG*Qj`w9t}kIjFaa!%Q!)J>*DtGySS|aPdfo4yK>ofYyRL*1 z_Ednk?t~c^4@bLUlMk0Qj<>3?sz43>Fl0X>{F6KU2SfW?yR)C}Y(w=2gFUc0eYB6H zzj-zl_0JI}cJo-w`>J&KCTe4dG2^{PBrIgV@TX&|Ng=vaYJMJh!PJ{{f*2Cj_7nrw zB*r~ws4ty(r2tm0)#?O?|2Of|ju%_SR{V0o_{CUR0}~1m`M&H?=?ZPfD?9Ru zC@@_68&xq4X^2#^ju}1sUiCgWy%qdsk=X3+wo3m@wMOz|gw^GpF6*+mis0gl_DMC} zw~LAF!p5c!Rr(=BevYZS_P2~8f0u|P;~Ugcw~Fl{=k~;W-K*7+iz%R* z80sN{nNo=)*rX4*;u+)7Blar3JAtO$)^|H-o3b3LHQ+ViRYZODL2tQkS$Bx!t(XM>K0tN7xY%yml|^;5b#_kk zK3NJa-PpmX-5h;*6ZviT7%Do`&0M9OUMTjN%dNcj_^L88mO8x4|C(Kr&d%ymRXTAm z{Y+m$kF|c=&IKAo;5+<^m1`1d8$h=P)s=gZ#Ip5gba30}ZB< zTSP3e6jT}Y#st!G4c5;b$g}7uK_Ji|6pl$7!&_rpQ+lK8L?AHnvY;LnpxijllnqZL zYWM2*^NaGTU9YazN90M>rP}s#IRrgif8{r;|5eu?-$o5ZN2M(~Z^L{1zQ5b7J#D=_ zo~I+U|2i#kMx53cM+CBF6G5rE>8R71q{Tt8X zTk8C=Lr82<{rXSThOoI)K2*C(ztE^^g_iNWH+WMSc{kVa&Ux2x@Gs5@B5LXA>dlpm zO6gtq(-7UDUb($rt@U5Z{-o*2{Qed3$!%?Gu+N0bs4t!cEtGTF0C2EB1H&)ptnFDy zP~Ol#;InAl(^=#^1`}bIb2GWFsbyB6SNVxv&b2Q?q0b{j9D|n{9?k6@g z?4{hhCpWp(_?>cx$A0gK_ui_%Fa3Fg$|eSdBxx``JvrV=%%S#Yn@)fNwp%`d1N zZy{N#jCT$|g8S9Jk`S5RX~sewpHJEH!$4RS)v;F@x-6FCn}8guAC*l{{MlH@l^ol- zuYDqUE?#38*{ zWk=VLcIjQXqvh#5UOYXLV zzDvN?yi(=EZTm^Oi-(`tE`9rQmF>cc#lYn-YTV1YW`{G^DBJBoLQ{uSDF^O9IZ^Y= z4^p;;P3D7>@nt_V)IFQVk%Ka* zQQhn8L33j>F|I$!j4Eq%ghe?I@~FE@_?*+&(90$OM18L9l|~MW6YqA}ukV5qw{`R; z|LwQle7ddH{CA)$GNLd!$Dh8nDBh6fo;hCCZumyo>7d^91=sqABvkh#`th;bdW3pr z1LJ!9_Ilnq_>ds7wWyQPqdq0$cb{>eXr4l_I@u$gJ!ibUxN*Dr;d;=<$C&&3W*IlD z8&J#maeKUMG;Y|#c3GT3H}0IyHz8430azb4sU{vynDrZRH`EFy{5x0D7)b>>O9Q} zU0G<~?Q_27aeCW2LOT-UbVX3VO;B`Hduek{G$55Dofi?UIGX7_`e$`!l}_^euqD&c8;I#@G!iXZFL%5sBXBz&i&!p|DQ7Gemb0O3piq1m zZq>txURzNrEPnUV=5iIYkdA5jxV0^x@%0O9S!@G!on1no7|fnBM7IL^mr##>M4s^* zT1z^wwgK+5Ti2Tlmo9|h>o27?G=_*lD|^b#$;>C zJ#>6sC?A@0wUl_|#C?1yUY(Ujw8+UgE==Sg=cn?R#S{0;zZI#xn|?{Y&y)cs7b)(F zSU1_zd~_Jgh1r8pTYH#~cv9AZ#dFhVKY05~*KTsK=za;Cn594n|1Kr_Yr&BU3@IS7zMBKJF9uuZ2&$g#C zo;Of#32lvZr~N3;c^t)v7)i|`q^mqv^^&pME!%50o9xf$kDx$rljjJV6sW(HGl_qg z=s>#nAE!d5nIXr{e@yeeO~&__JVspzf?LM2MkXhDv9c{4J2zjI!U(c>o+q4N7=HZPhBK z*yU{0pcRW5)+E0iK&Ph()9(a!;*Jh>I(~_7`wrEDTNZS2JTuytC>HuS?W&}k@2id{ zxykX!YjIxlfL6^VnkkqD%c6tNV5JA=+jryQF6?Umas_=0#=t9=jC`+T4~pkfpw57v zj9C|y1;dY04)?~LIFe)&JC5Smo$tnCP17EBS;lH^F`JBh<$K=vHJyr?l`aVtcQIHT zvw_*pmX)j0*R#j@-uCCQir^sE1f{sYk#V0iAwaov^<}#>aDq+K&IwfM797N?rXdKa zs^xfa* ze58jc`5aa?m=$xDkfrlp2YDCC>(Tu`ry!jUQH_u*VbxQZ24QyYEg;Zvm5s&e5j?aR zBlk?vo5kD4j~b#`K4?~c7OR0JwHhq>EUReCS=C=kxR1i;O=IXcl3oL^c};AJ)0dLV zkoWoJ_R2O-G*E9%bjG8wZGfRueYlKG9i%QU#uP-Xc1GgRc2s)>xJE1Q@*iEV8b7Q2 zCC)yTGOhpR%jRqf@~W;T=9M85_uFe#ht1%WZNv|Ui=p8+3ZjcWWGdI>P@a1ayJ*-`#25BS&PQqzW1CdlI7j=QDu>+Pfb4VGGvC5V#3@9OD$ z9*hB^Y~<4vX%^M{V$PUrGNisZV zvew7GsGW@-ddR4TVvcC?Ah6n{W{r&gQ+H}-ihAIyXHHODwLQ zS)Vz*x9jnsnLW$A{pA6Bpbp+x!>MJpw&N@GwzLV;nOpC``o-S0WoAdM24Zf^_&n>J zBzYZj*@iF!D0mK7Uj+nUIi3cRXo1in7F(IcQP`QH4wv+px$7Hs(DToDf3cL~^mam9 zeNEXR&Skc)II_gaw!X4J7s`C41JJA1+M|s`$eL?JO~&F)uT8p&G<}=o&WPfTRe&^- z&U$uBiGZeoHq(pCdOgI?D*`!lO3R0g$2n@z?**w3x}QQfSp;d}>s;{v0J}g$zgb_H ziXd4Mv7oL1jq?4}sEyLPFuZ1tWxXcpom5Wo3t?@0(&QqYO0c2jy-jMOEPhW|d_WU_ zGXWFT1%hcb>ZEqRUbYP)8rkP*8H5n*-f~*L@`7{-6!h!AJwN$y z_U7cphx60_IzgIFFojF4<cuQ|tNbS7&c8PL5&KK>OI-ESbrmmd%ox7FyjLvkC&-6u=C93(M)67Y& zqkZ#(CrVDuQ2I^ixoj-@tcO4Vgoc`}zOutw=Ms|c%QRPDGM!}@xa4NCu zkR-y;#f%_A&228ELnDYVZ#Nr3l?=4G4t9*76izdOW*%=-BUsb}G=gSgZzCgE)PiCJ z4>~l02lkDi>;~&b@PJ?hZ=8s^S4H==(H0H|1N8&2h6e<{qkGlYhaG@_twZoMrgPT4 z0>pyGvbpU)08C{KDb09<2Z!~EgjoRP7apN49^o?WwY+HRnnF0f>lY$*`_GoY|7o~{ zh%*c^01w%lB`qYYF!JIjR_IffFP|>Bf{1SmfK4S%MbxNaM7=m_r*^_L>_zI6zuyr!xsfCgRf-ZLk-I0ik53tp@F_xn5z1uz^O3Y0XHI~S z;Vp$FWV%SV)eBig=+nh0(1HUjMJS}4{AXgv4kK`AEX66Ls{DY32Xt}FvLAzB!k}%$ zAef3RU@-_Qr#XpG*sTI0(k(4tYJk8ET0wCLRSwW~IY?YU=}5N(U^!2Ixrh+9Ja_~H z8RXz0EF)_yO}Q+8vj|)DKURo?|}=! zLxkzy8M!}e-&kcx(6=#aEY)v?+Y!x$^?onu=oLgiJ%=s_}iedGfi5#Hmyxs z!WEj;NekYo(I)N4nI+DYM*^kc)0Pk$08U$wywDNZzqydMobCp=i}3POr~7H(B?9w! z|IODBe{*;bQ}+Rgj}r1RpoMbm(?f;w<9m5mLmX&?e4j1HC5rFg+&KQ6pGDz}N6A7M zlPfXUy%pSl+n=Z)h2^J^Rn{4y0AcZWMz%-RGfK7>>-n6gM|TByy+CG49EqJajMOed zTi-AZKj(G1>|&z#`dl|ajn=4CcCtpVF8o;2r+WGf0>wX2qK~B16jK5I&@aSz_%574 zjDIdLT_U&S+pxeoTRA+-aouOg;T6rEU3@GvM3mzwR4;8W z9aRsuJ0tgRRIk8r&IWyZ>6K`HpoJp>utP0O{%5SP*hbOluzsLO{EU zpna6BFSgNR9pA_#_oSey!W|pdrf?t_3Oa0uGy=G)sLU~!uZ0ZlEky&a-B z@*$JytHjSEGl#Y$L~%sD@&+b<4FR|U zQ80tf&gjE|{kow*#LZw>5ptt`sALNrhuKsz(GF#Ksg?t5j53Hpy?Iq<6^l`?N{CSp zoOZqp$~fkZE5Eb3bUfN-Dg8v&3vVtOuN=}W8fCq(A29+ams}a(WNf#UD4fs@o3|T} z!qI*f8CrGbL~#XQ*w|`96wXqA__;yl0p2&*Ggd9%Mz!>?MdqqY{qNyQ)U&D~r)K_a5QQ!(utO#wY|1uF-Qox1S|H zU}epabt_5WDRG!=7D*PEVCkG4vHmc^P4>QleH0ymj0EutWxXq230-=6wr-bZ zGSWRnnot!6T9*ia$MKX0WFFKS60-^xcs%7Hc^lXq6iP7+a8QV5H64^BbVG1Rh$eG= zNTl1_+JF$PDKH>J1DXzqn_l*SgJR*Lx;!Y^3~E$9!SK3G)E+0E{Ke_k# zWfp89F;Fsz!dqQKqDWflU2gr~|NJj|{rc?utFH>N3UL@ki*0r_PgJBppkGhe$3T3` zt*-v($e0IzCy3e8onG~gfT>+X6ATQYjcUJ5D2yf@h-NljO1(7pC1VDbX@Zs6EKG{E zSO3=}t)1K%CP~(FXPAVvmOEoz792|Rkez7*oYFoN3p{m8RfQWE)Sy=$y2zBs*wcU( zt!2tE$U-w^WJxDWUhkTBYz8&xh1Ig_HDy9jXB--TV$*yHBLOzeg|t>n%^(ZUn~^Tz zH1IY0NLaw+VruDKMS61)s+@8f8K`&CpxsI6b6iU};--Ajmt7BJ|EAZI*{z0`5?*TL z{57aZw}jcfSDFf>IItO259vFc0`zx<7~?WrWIxKJDl-3y3I=ro(Qh}7@41D3tiH`P zDcV|pS~Y_#Viw)96<40(($(Fz>00UmGxle5<4=jg@y0AYaP`IcYxJ>rGxqFC=EN4r zu~Mhux=zG{`{u)m1PF4kVu2DR>*eUB;RHdL<}goTuVr*J3Qykcub0`W_DBMJFXzN0Nqr^hl-3OtfQ1O0RWmf0$DDrggiFNFM=+&Y&T|1BniPs`PA~bT#h&NPVoScwU6hw*R z$}$hd&J9o=F())hL3Wj0j6W7L=&1 z4gnAz)3pg)to9uRV4zW8-2)6b91H;%Xe5{!VB{?863DQJCn)h@t>Fo3WLSNFJmCf7 zPy>m4Wk6tJLpvypGe8`{d7)?ByZ3oNoXValhts8AmgOMllM~t3DRE`#8Y!Z|ET3gT z{da@+ReG7~LDREU=X1%V)DTjNfUu1?F(0}@A8zN0R*t73R}LloYz;JGS{Y^;B}C0O zdPHN@0Q882odFH%@(K|SD=VXaM-{t6z+`azShvs-4m#Ti9ZMZY!HsYzTIaYCFK`9m zMl?3fj2m@SSWBRh62#UTXruq`$OY@5+qfz zj*q*?6M>5Hy;jPEnQIXsL4!bpI`nPqp<#n7d-*ai6~0yO5uyq^+|lY`$mip+SV^J+qMZtesoAJvfxG#Z7V#4LPjdBsbm4DHnp+ zHH&M+#@*Z=CHSy^`Q6+eC9E*Nn_G6mrVF|^rB76cgqbvL-_ucU$GgFMNKg7L;!=;5 zjPolBR$Sq2(C@PdKHQ)iy}S^`RkT4V0s_x6>8X&&<>>X+MtD2ZzdEg+NyRoQ4Q&wB zMX8}ZB!aODIqx;Cd@Ho5Q~CClclM5; z*JSCSiFjFC*~IZ(-J}!Mdeka26(mG zRD*cL1KvNEKbuR(tKF8Q`_3X1CxvIhNPN|qgJ^&0gP7V z;ol?&fus+A*)#U-+fz0UBV9{!9!n%8r*`uyS6B_)io>5t4q&ZH6=&tvBhKXFEjMNb zO9B+LLSSKYA;hp~HL|MQTQSH$71IP3jrA)qixqF7g@a#!3A+=mR$?vgQq7?T`5H_a zM5U1!{izcz(pTgPm-QQq`fW4uB_X?=c%w;kRq?BTu+l@STF{B9y+wKjq)Q;?KmkHR zYKqdMU>RaIbrx(Cak-pA={?ikDh?ptSS%;*a#ts17w;|Dt>^npdo`MCkNa?okJ9K@ zWp6gA(bf%^#qzv=e|^KF$a8^CMlGt|Ms7mSl|36JJq0~1-YP_Wxm9_JH?@aY z1Y-$bg&E4)v20o27ylspBqe)iG?!g`cJ~!AGtpYr#vsL0W^b{9GTnWOSwK=pNCODVagL{C(eK3)ec zmOU~?8SOY^%=!4?1MsmI&wOX0CzaTL*aFvyTz0FG0-I{6(0uN|JPBX|p+tss7Nu9= zCV+%^H|go!1U~wg~5c6FTkW z52auw4lt!{YKOvTN}$rg!bhFY$jXN~11n2EUFq!FyWs)5TBN&46|ZeW%nQ|jC7WrJ zu0-Z)RV(O#8(6#DSt8UIy>5vz6O_J`_6OuHBe*a!gOrH}Tuq=kY`(G)CvbBifT60< zl!k1P#}&YyXGg=`63MV@pwDZOEB-`i-?+Dt(Y{lriZ)ijK8!btp~CnwUpTvJuE`)a z=Ebm&@z-UvhViWsKhjNASQQUJ-A&$(9FtIb1B;cM2a z9p4_@Pp5vF1m0+~H>ZLjVEuSL<59h>enZB@cD8zhB>N!VlvU?5AchW~RBZK?#l(8fC7 z${+*hhu*gpH7BU!EK#M0SdD)FT=V0b3%6h2$55WM3;zYMp+mk4WTRg5gqJd11O5Ss z1PXX50h?3?$XPoxY^-kY0gPaoxo&NXR=6k%6Fy3~%X0I}t`y z|FuQaTp4n)^6D(WhJg?vp#JU(y~T`Y%Zi-cDYF+ja|ML&feP;;4Zf^b-c^Nps|D%h9-~;t-O0L z`O12ItOw$!4d}-+-%BJRT+U%6^8xn#n=N_E|XmNJouxH+T74=P8C zO8vpk7eV6OJuPN`(fD;4tp7Wco%yTy64|WZp*)9J)9j}j&TMs6^Jx$i$ad%w-Gls0>yz9+oUryt>?acl=(hTy>i47p8zD zw#gw$S9YcUoNQreJ-es1OMfM z>fi2yYFSl(>rZ?;rR@8^-PM$=kJQcO)Fus*5Rl&mGp?n4B)0FPRxiiuFV;3LpenA# zlyc40B4^-Nb=_3vmi&}LP=}CgU#pXZ>?Ck)r~)Sr0dD8O<9}*pb;-DUuI6;9w)~Kb zxHYX_Rw)mUjmtYi$a!VD4|9vjiSWI+Uo3^Vdc`1r-$SkqiD^ibUdy70t6D)-{*bG% z?(Vq?PV0P7`d<7@CLQmk-BFbX+I)N?<^|EivB`0*Ev>q(T)KbKs>QS3Dh(q z%_|0=_hL#~mg}H?rUT;?rKS$qG)`P5=*dGxfwe=)3DP`13cX=#?v+9=!kP

BZP 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 z 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≧*3r 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 Rk4qhwI$$ip6d&ay^glILE>r*j delta 473006 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

lPt2aVoZk;zGu8`kmM^ALSS6 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ξ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�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 Dv!ldDB)94?QzW*q9|rAM`s@r+ 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

HMaHLhlM)SqJBa6JLyGX{6lxGs=~)uh|FUD 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%0D}pjOKP<|<@Ed1@n&L= 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

QzaW>AM#}Nh;=Le;A&omp3c1lATyU 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 X^k2%fRlJ?R=A}%(U2en{)aCyJQ^M}} diff --git a/billieboy7_ip_master/authorship.json b/billieboy7_ip_master/authorship.json index a9b0c96d..43a4247f 100644 --- a/billieboy7_ip_master/authorship.json +++ b/billieboy7_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"# Duke - Task Tracker","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"\u003e \"Implement whatever organizational system works best for you, but then be sure to review your to-do list at least once a week.\" – Cheryl Barker ([Source](https://bookroo.com/quotes/to-do-lists))","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"Liberate your mind from the burden of remembering tasks. Duke offers:","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"- Easy to use task tracker","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"- Intuitive text-based interface","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"- Remarkable ~~speed~~ SPEED","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"So what do you have to do :","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"1. Download it from [here](https://github.com/billieboy7/ip/releases/tag/A-Jar).","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"2. Double-click the executable.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"3. Input your tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"4. Let it handle your task management for you 😉","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"**Awesome Features**","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"- [x] Task management","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"- [ ] Calendar View (coming soon)","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the ```main``` method:","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"```java","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" Duke duke \u003d new Duke(\"./data/data.txt\");","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" duke.start();","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"billieboy7":35}},{"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":"billieboy7"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-06"},{"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":{"billieboy7":1,"-":41}},{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"T | 0 | sujith","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"T | 0 | suji","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"T | 0 | bill sujith kumaar","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"T | 0 | bill","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"billieboy7":4}},{"path":"src/main/java/Command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" public FindCommand(String fullCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" this.keyword \u003d fullCommand.substring(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" TaskList findList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" for (Task t : taskList.getTaskArrayList()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" if(t.getDescription().contains(this.keyword)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" findList.addTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" ui.list(findList.getTaskArrayList(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"billieboy7":27}},{"path":"src/main/java/Command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import Main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import Main.UI;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import Task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" * ListCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" * Used to execute List Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" * Constructor for ListCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" public ListCommand() {}","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * method to execute the list sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" ui.list(taskList.getTaskArrayList());","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":29}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * ByeCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Bye Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" * Constructor for ByeCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" public ByeCommand() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * method to execute the bye sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" ui.printByeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" * Method to decide whether program should continue","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" * @return false, signifying end of program","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":43}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * Abstract Command class","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" * method to execute a command sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {}","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * Method to decide whether program should continue","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @return true, signifying continuance of program","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":30}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * DeadlineCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Deadline Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" private String fullCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for DeadlineCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand full user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public DeadlineCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * method to execute the deadline sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" taskList.addDeadline(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":37}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * DeleteCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Delete Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" private String fullCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for DeleteCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand full user input","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public DeleteCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * method to execute the delete sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" taskList.deleteTask(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":37}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * EventCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Event Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" private String fullCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for EventCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand full user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public EventCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * method to execute the event sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" taskList.addEvent(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":37}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * ListCommand is a subclass of Command.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute List Commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" * Constructor for List Command","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" * method to execute the list sequence","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" ui.printList(taskList.getTaskArrayList());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":33}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * Mark Command is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Mark Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" private int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for MarkCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param index index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * method to execute the mark sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" taskList.mark(this.index);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(String.format(\"Given index is out of range. Index range should be between\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" \" 1 and %d.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" taskList.getSize()));","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":43}},{"path":"src/main/java/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * ToDoCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute ToDo Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for ToDo Command","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param description user description to be saved for ToDo tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public ToDoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" taskList.addToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":29}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * UnmarkCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Unmark Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for UnmarkCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param index index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * method to execute the unmark sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" taskList.unmark(this.index);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(String.format(\"Given index is out of range. Index range should be between\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" \" 1 and %d.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" taskList.getSize()));","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":42}},{"path":"src/main/java/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":" * DukeException class is subclass of the Exception class","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" * Constructor for DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * @param message message to be output when exception is thrown","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":15}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" * Duke class - Main class","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" UI ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" Duke duke \u003d new Duke(\"./data/data.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" duke.start();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * Constructor for Duke class","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @param filePath file path from which past saved date, if available, should be read from","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" private Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" this.storage \u003d new Storage(filePath, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" this.ui \u003d new UI();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" this.ui.printWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" this.storage.loadList();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" } catch (DukeException | IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" * Method to start the Duke program","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" private void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" boolean isContinue \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" while (isContinue) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" String input \u003d userInput.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" command.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" isContinue \u003d command.isContinue();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" if (isContinue) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Now you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" this.ui.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":65,"-":2}},{"path":"src/main/java/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import command.ToDoCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * Parser class to read user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * parse method reads users input and directs the course of action.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand user input","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @return return an Object belonging to the command class for further execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception to Duke - subclass of Exception class","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" if (Parser.isBye(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isList(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isMark(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" Parser.testMarkAndDelete(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(fullCommand.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isUnmark(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" Parser.testMarkAndDelete(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(fullCommand.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" if (Parser.isToDo(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" String description \u003d fullCommand.substring(4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" // test whether the todo is valid","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" Parser.testToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" return new ToDoCommand(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isEvent(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" Parser.testEvent(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" return new EventCommand(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isDeadline(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" Parser.testDeadline(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" return new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isDelete(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" Parser.testMarkAndDelete(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" return new DeleteCommand(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isFind(fullCommand)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" return new FindCommand(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" private static boolean isBye(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" return fullCommand.equals(\"bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" private static boolean isList(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" private static boolean isMark(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"mark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" private static boolean isUnmark(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"unmark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":" private static boolean isToDo(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" private static boolean isEvent(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"event\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":" private static boolean isDeadline(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"deadline\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" private static boolean isDelete(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"delete\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" public static boolean isFind(String fullCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":" String[] inputArray \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" return inputArray[0].equals(\"find\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":" private static void testToDo(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" private static void testMarkAndDelete(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":" String[] words \u003d description.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"billieboy7"},"content":" String index \u003d String.join(\" \", Arrays.copyOfRange(words, 1, words.length));","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"billieboy7"},"content":" if (index.isEmpty() || !index.matches(\"-?(0|[1-9]\\\\d*)\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Following \\\"mark\\\" or \\\"unmark\\\" or \\\"delete\\\", an integer value is expected. Blanks or\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"billieboy7"},"content":" \" non-integer values are invalid.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"billieboy7"},"content":" private static void testEvent(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d description.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"billieboy7"},"content":" if (list.length !\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Fill up all fields. Do not forget the \\\"/\\\" symbol before your\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"billieboy7"},"content":" \" start and end time.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"billieboy7"},"content":" String title \u003d list[0].substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"billieboy7"},"content":" String start \u003d list[1].substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"billieboy7"},"content":" String end \u003d list[2].substring(3);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"billieboy7"},"content":" if (start.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"\\\"from\\\" time missing!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"billieboy7"},"content":" } else if (end.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"\\\"to\\\" time missing!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"billieboy7"},"content":" private static void testDeadline(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d description.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"billieboy7"},"content":" if (list.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Fill up all fields. Do not forget the \\\"/\\\" symbol before your\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"billieboy7"},"content":" \" end time.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"billieboy7"},"content":" String time \u003d list[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"billieboy7"},"content":" if (!time.startsWith(\"by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Start with \\\"by\\\".\");","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"billieboy7"},"content":" } else if (time.substring(2).equals(\" \") || time.substring(2).isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Field Empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":163}},{"path":"src/main/java/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" * Storage class to create objects that manage saving/loading data","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * Constructor for Storage class.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @param filePath file path from which past saved date, if available, should be read from or load to.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" * @param taskList contains the ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public Storage(String filePath, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" * saves data in the given TaskList object to the file specified in the file path.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * @param taskList contains the ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" public void saveList(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" for (Task task : taskList.getTaskArrayList()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" writer.append(task.outputStoreFormat()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"IO exception occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" * loads data from the file specified in the file path.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" * @throws IOException input/output error when there is an error reading from the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" void loadList() throws DukeException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" FileReader fileReader \u003d new FileReader(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" BufferedReader reader \u003d new BufferedReader(fileReader); // BufferedReader wraps the fileReader","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" String[] inputArray \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" switch (inputArray[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" ToDo toDo \u003d new ToDo(inputArray[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":" int status \u003d Integer.parseInt(inputArray[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" if (status \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" toDo.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":" this.taskList.addTask(toDo);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":" Event event \u003d new Event(inputArray[2], inputArray[3], inputArray[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" if (inputArray[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" event.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" this.taskList.addTask(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":" Deadline deadline \u003d new Deadline(inputArray[2], inputArray[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" if (inputArray[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":" deadline.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" this.taskList.addTask(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"An unexpected error occurred while reading the text file. Error Code:\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" \" 01\");","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":" this.saveList(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"IO error occurred. Check the formatting of the text file - data.txt.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"billieboy7":119}},{"path":"src/main/java/main/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" * UI class - User Interface - Handles the display shown by the program.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"public class UI {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" * Constructor for UI class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" public UI() {}","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Generates the divider displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" void printDivider() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * Generates the welcome message displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" void printWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" System.out.println(\" Hello! I\u0027m JARVIS\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" * Lists out the tasks stored in the ArrayList\u003cTask\u003e Object.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" * @param taskArrayList - Contains the list of Tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" public void printList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"There are no tasks in your list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" Task t \u003d taskArrayList.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" System.out.println(index + \".\" + t.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" public void list(ArrayList\u003cTask\u003e taskArrayList, Boolean isMatchingList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"There are no matching tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" } else if (isMatchingList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Here are the \" + taskArrayList.size() + \" matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" Task t \u003d taskArrayList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" System.out.println(index + \".\" + t.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":" Task t \u003d taskArrayList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" System.out.println(index + \".\" + t.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":" * Generates the bye message displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":" public void printByeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":" this.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":92}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" * Deadline class is a subclass of Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" private String time;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter outputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param time user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public Deadline(String description, String time) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * Overloaded Constructor for Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param dateTime user provided end time as a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" public Deadline(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" String taskType \u003d \"D\";","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" String isTaskDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" if (this.dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \" + this.time);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" this.dateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), time);","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), dateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"billieboy7":74}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" * Event class is a subclass of Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" private String startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" private String endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter outputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * @param startTime user provided start time.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @param endTime user provided end time.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" public Event(String description, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * Overloaded Constructor for Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @param startDateTime user provided start time as a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" * @param endDateTime user provided end time as a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public Event(String description, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" String taskType \u003d \"E\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" String isTaskDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" if (startDateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \" + this.startTime + \" | \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" this.endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" + this.startDateTime.format(outputFormatWithTime) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" this.endDateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" if (startDateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), startTime, endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), startDateTime.format(outputFormatWithTime)","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" , endDateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":80}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":" * Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Constructor for Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" * @param description description provided by user.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * setter method which updates whether a task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param status boolean value which represents whether a task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * true - task is done, false - task is not done","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" public void setTaskDone(boolean status) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" * getter function","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * @return retrieves the saved description.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" return this.description;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"billieboy7":57}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Wrapper class that contains ArrayList of type Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for TaskList class.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public TaskList() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" * Deletes Task from the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the index of the task to be removed.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" public void deleteTask(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7)) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" System.out.println(taskList.get(taskIndex));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" taskList.remove(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" * Adds Event to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the details of the Event to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" public void addEvent(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d input.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" String title \u003d list[0].substring(6);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" String start \u003d list[1].substring(5).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" String end \u003d list[2].substring(3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" // returns 1 if correct datetime","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" // returns 0 if random string input","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" int startTimeFormat \u003d this.computeDateTimeFormat(start);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" int endTimeFormat \u003d this.computeDateTimeFormat(end);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" if (startTimeFormat !\u003d 1 || endTimeFormat !\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" Event event \u003d new Event(title, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" System.out.println(event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" taskList.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter inputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" LocalDateTime startDateTime \u003d LocalDateTime.parse(start, inputFormatWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" LocalDateTime endDateTime \u003d LocalDateTime.parse(end, inputFormatWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" Event event \u003d new Event(title, startDateTime, endDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" System.out.println(event.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" taskList.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Invalid date-time format. Stick to the given format of dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" * Adds Deadline to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the details of the Deadline to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" public void addDeadline(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d input.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" String title \u003d list[0].substring(9);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" String time \u003d list[1].substring(3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" // returns 1 if correct datetime","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" // returns 0 if random string input","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":" int timeFormat \u003d this.computeDateTimeFormat(time);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" if (timeFormat \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":" Deadline deadline \u003d new Deadline(title, time);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter inputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, inputFormatWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" Deadline deadline \u003d new Deadline(title, dateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Invalid date-time format. Stick to the given format of dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" * Adds ToDoTask to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the details of the ToDoTask to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" public void addToDo(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" ToDo toDo \u003d new ToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":" System.out.println(toDo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":" taskList.add(toDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" * Generic method to add tasks to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":" * @param task task object to be added to the tasks list.","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"billieboy7"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"billieboy7"},"content":" * marks the specific task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"billieboy7"},"content":" * @param taskIndex index of the task to be marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"billieboy7"},"content":" public void mark(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"billieboy7"},"content":" Task currTask \u003d taskList.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"billieboy7"},"content":" currTask.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"billieboy7"},"content":" System.out.println(currTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"billieboy7"},"content":" * unmarks the specific task.","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"billieboy7"},"content":" * @param taskIndex index of the task to be unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"billieboy7"},"content":" public void unmark(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"billieboy7"},"content":" Task currTask \u003d taskList.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"billieboy7"},"content":" currTask.setTaskDone(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"billieboy7"},"content":" System.out.println(currTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"billieboy7"},"content":" * size() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"billieboy7"},"content":" * @return number of tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"billieboy7"},"content":" public int getSize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"billieboy7"},"content":" return taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"billieboy7"},"content":" * Checks whether given string is made up of just numbers.","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"billieboy7"},"content":" * @param strNum string to be tested.","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"billieboy7"},"content":" * @return true - is numeric, false - not numeric.","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"billieboy7"},"content":" public static boolean isNumeric(String strNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"billieboy7"},"content":" if (strNum \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"billieboy7"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"billieboy7"},"content":" double d \u003d Double.parseDouble(strNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"billieboy7"},"content":" } catch (NumberFormatException nfe) {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"billieboy7"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"billieboy7"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"billieboy7"},"content":" * The method is used to identify dates in the below Local Date Time format :","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"billieboy7"},"content":" * \"dd-MM-yyyy HHmm\" with HHmm in the 24 hour format. Note: This method only checks for the","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"billieboy7"},"content":" * structure of the input. The validity of the Local Date Time Format is validated/tested later.","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"billieboy7"},"content":" * The method will return 1 if it is in LocalDateTimeFormat, 0 if it is a custom string format","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"billieboy7"},"content":" * @param input string to run the test on.","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"billieboy7"},"content":" * @return 1 or 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"billieboy7"},"content":" int computeDateTimeFormat(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"billieboy7"},"content":" // returns 1 if correct datetime","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"billieboy7"},"content":" // returns 2 if correct date","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"billieboy7"},"content":" // returns 0 if random string input","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"billieboy7"},"content":" // Assume that the date input is dd/MM/yyyy 16-08-1977 1800","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"billieboy7"},"content":" String[] blankArray \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"billieboy7"},"content":" // Check for datetime input","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"billieboy7"},"content":" if (blankArray.length \u003d\u003d 2 \u0026\u0026 isNumeric(blankArray[1])) {","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"billieboy7"},"content":" String[] slashArray \u003d blankArray[0].split(\"-\");","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"billieboy7"},"content":" boolean isAllNumeric \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"billieboy7"},"content":" for (String s : slashArray) {","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"billieboy7"},"content":" if (!isNumeric(s)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"billieboy7"},"content":" isAllNumeric \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"billieboy7"},"content":" if (slashArray.length \u003d\u003d 3 \u0026\u0026 isAllNumeric) {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"billieboy7"},"content":" return 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"billieboy7"},"content":" return 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"billieboy7"},"content":" * getter method.","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"billieboy7"},"content":" * @return ArrayList of Task objects.","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"billieboy7"},"content":" public ArrayList\u003cTask\u003e getTaskArrayList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"billieboy7"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"billieboy7":214}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":" * ToDo class is a subclass of Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Constructor for ToDo class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception by Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" public ToDo(String description) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" String taskType \u003d \"T\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" String isTaskDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":45}},{"path":"src/test/java/main/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"//Underscores may be used in test method names using the","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"// following three part format featureUnderTest_testScenario_expectedBehavior()","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"// Testing the Parser.parse() method","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" public void parse_correctByeInput() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" assertEquals(new ByeCommand().isContinue(), Parser.parse(\"bye\").isContinue());","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" public void parse_incorrectByeInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"bye bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public void parse_inputStartingWithEvent_shouldReturnEventCommandParseTest() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" assertEquals(EventCommand.class, Parser.parse(\"event Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" \"/from 02-08-2023 1800 /to 02-08-2023 2200\").getClass());","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" public void parse_eventSpellingMistake_shouldReturnDukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"evennt Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" \"/from 02-08-2023 1800 /to 02-08-2023 2200\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" public void parse_notIndicatingTo_shouldReturnDukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"evennt Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" \"/from 02-08-2023 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" public void parse_notIndicatingFrom_shouldReturnDukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"evennt Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" \"/to 02-08-2023 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"billieboy7":66}},{"path":"src/test/java/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" public void outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" assertEquals(\"D | 0 | homework | tomorrow\", new Deadline(\"homework\",","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" \"tomorrow\").outputStoreFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" assertEquals(\"D | 0 | clean room | tonight 8pm\", new Deadline(\"clean room\",","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" \"tonight 8pm\").outputStoreFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" assertEquals(\"D | 0 | watch movie | 16 Aug 1977 2:00AM\", new Deadline(\"watch movie\",","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" LocalDateTime.parse(\"16-08-1977 0200\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"))).outputStoreFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"billieboy7":25}},{"path":"src/test/java/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" // Test - private int computeDateTimeFormat(String input)","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" // The method is used to identify dates in the below Local Date Time format :","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" // \"dd-MM-yyyy HHmm\" with HHmm in the 24 hour format. Note: This method only checks for the","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" // structure of the input. The validity of the Local Date Time Format is validated/tested later.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" // The method will return 1 if it is in LocalDateTimeFormat, 0 if it is a custom string format","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" public void computeDateTimeFormat_localDateTimeInput_shouldReturnOne() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" TaskList task \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" String input \u003d \"16-08-1977 1700\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" assertEquals(1, task.computeDateTimeFormat(input));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" public void computeDateTimeFormat_customInput_shouldReturnZero() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" TaskList task \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" String input \u003d \"16 August 1977 5pm\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" assertEquals(0, task.computeDateTimeFormat(input));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"billieboy7":33}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"# Duke - Task Tracker","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"\u003e \"Implement whatever organizational system works best for you, but then be sure to review your to-do list at least once a week.\" – Cheryl Barker ([Source](https://bookroo.com/quotes/to-do-lists))","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"Liberate your mind from the burden of remembering tasks. Duke offers:","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"- Easy to use task tracker","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"- Intuitive text-based interface","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"- Remarkable ~~speed~~ SPEED","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"So what do you have to do :","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"1. Download it from [here](https://github.com/billieboy7/ip/releases/tag/A-Jar).","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"2. Double-click the executable.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"3. Input your tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"4. Let it handle your task management for you 😉","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"**Awesome Features**","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"- [x] Task management","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"- [ ] Calendar View (coming soon)","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the ```main``` method:","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"```java","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" Duke duke \u003d new Duke(\"./data/data.txt\");","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" duke.start();","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"billieboy7":35}},{"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":"billieboy7"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"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":"billieboy7"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"billieboy7":16,"-":41}},{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"T | 1 | bill","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"E | 0 | | 19-20-3232 | 31e2","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"T | 0 | aSDA","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"T | 0 | test 4","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"billieboy7":4}},{"path":"src/main/java/Command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" public FindCommand(String fullCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" this.keyword \u003d fullCommand.substring(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" TaskList findList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" for (Task t : taskList.getTaskArrayList()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" if(t.getDescription().contains(this.keyword)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" findList.addTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" String message \u003d ui.list(findList.getTaskArrayList(), true);","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" return message;","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"billieboy7":28}},{"path":"src/main/java/Command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import Main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import Main.UI;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import Task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" * ListCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" * Used to execute List Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" * Constructor for ListCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" public ListCommand() {}","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * method to execute the list sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" ui.list(taskList.getTaskArrayList());","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":29}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * ByeCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Bye Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" * Constructor for ByeCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" public ByeCommand() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * method to execute the bye sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @return","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" return ui.printByeMessage();","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" * Method to decide whether program should continue","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" * @return false, signifying end of program","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":44}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * Abstract Command class","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" * method to execute a command sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" return null;","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * Method to decide whether program should continue","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @return true, signifying continuance of program","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":32}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * DeadlineCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Deadline Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" private String fullCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for DeadlineCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand full user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public DeadlineCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * method to execute the deadline sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * @return","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" String message \u003d taskList.addDeadline(fullCommand);","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" return message;","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":40}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * DeleteCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Delete Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" private String fullCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for DeleteCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand full user input","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public DeleteCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * method to execute the delete sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @return","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" String message \u003d ui.showDelete(fullCommand, taskList);","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" taskList.deleteTask(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" return message;","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":41}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * EventCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Event Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" private String fullCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for EventCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand full user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public EventCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * method to execute the event sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * @return","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" String message \u003d taskList.addEvent(fullCommand);","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" return message;","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":40}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-17"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" * ListCommand is a subclass of Command.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" * Used to execute List Commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" * Constructor for ListCommand","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" public ListCommand() {}","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * method to execute the list sequence","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" return ui.printList(taskList.getTaskArrayList());","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":29}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * Mark Command is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Mark Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" private int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for MarkCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param index index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * method to execute the mark sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * @return","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" sb.append(taskList.mark(this.index));","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(String.format(\"Given index is out of range. Index range should be between\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" \" 1 and %d.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" taskList.getSize()));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":47}},{"path":"src/main/java/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * ToDoCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute ToDo Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for ToDo Command","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param description user description to be saved for ToDo tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public ToDoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" String message \u003d taskList.addToDo(description);","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" return message;","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":30}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import main.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * UnmarkCommand is a subclass of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Used to execute Unmark Commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for UnmarkCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param index index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * method to execute the unmark sequence","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @param taskList object containing the ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @param ui user interface responsible for terminal messages","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param storage object to communicate with data.txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" public String execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" sb.append(taskList.unmark(this.index));","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" storage.saveList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(String.format(\"Given index is out of range. Index range should be between\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" \" 1 and %d.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" taskList.getSize()));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":45}},{"path":"src/main/java/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":" * DukeException class is subclass of the Exception class","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" * Constructor for DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" * @param message message to be output when exception is thrown","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":15}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package gui;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" private Label dialog;","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" private void flip() {","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" db.flip();","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" return db;","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"billieboy7":62}},{"path":"src/main/java/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package gui;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"public class Launcher {","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"billieboy7":9}},{"path":"src/main/java/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package gui;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import main.Duke;","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" private final Duke duke \u003d new Duke(\"./data/data.txt\");","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" stage.show();","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"billieboy7":34}},{"path":"src/main/java/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package gui;","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import main.Duke;","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" private Duke duke;","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" public void initialize() {","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" @FXML","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" userInput.clear();","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"billieboy7":55}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Duke class - Main class","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" UI ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" Duke duke \u003d new Duke(\"./data/data.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" duke.start();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * Constructor for Duke class","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param filePath file path from which past saved date, if available, should be read from","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" this.storage \u003d new Storage(filePath, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" this.ui \u003d new UI();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" this.ui.printWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" this.storage.loadList();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" } catch (DukeException | IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" * Method to start the Duke program","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" private void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" boolean isContinue \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" while (isContinue) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" String input \u003d userInput.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" command.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" isContinue \u003d command.isContinue();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" if (isContinue) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Now you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" this.ui.printDivider();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" StringBuilder botResponse \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" boolean isContinue;","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" botResponse.append(command.execute(this.tasks, this.ui, this.storage));","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" isContinue \u003d command.isContinue();","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" if (isContinue) {","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" botResponse.append(\"\\nNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" botResponse.append(this.ui.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" } catch(DukeException e){","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(botResponse);","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":83,"-":2}},{"path":"src/main/java/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import command.ToDoCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * Parser class to read user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * parse method reads users input and directs the course of action.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param fullCommand user input","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @return return an Object belonging to the command class for further execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception to Duke - subclass of Exception class","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" if (Parser.isBye(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isList(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isMark(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" Parser.testMarkAndDelete(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(fullCommand.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isUnmark(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" Parser.testMarkAndDelete(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(fullCommand.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" if (Parser.isToDo(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" String description \u003d fullCommand.substring(4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" // test whether the todo is valid","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" Parser.testToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" return new ToDoCommand(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isEvent(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" Parser.testEvent(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" return new EventCommand(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isDeadline(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" Parser.testDeadline(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" return new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isDelete(fullCommand)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" Parser.testMarkAndDelete(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" return new DeleteCommand(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" } else if (Parser.isFind(fullCommand)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" return new FindCommand(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" private static boolean isBye(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" return fullCommand.equals(\"bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" private static boolean isList(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" private static boolean isMark(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"mark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" private static boolean isUnmark(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"unmark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":" private static boolean isToDo(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" private static boolean isEvent(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"event\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":" private static boolean isDeadline(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"deadline\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" private static boolean isDelete(String fullCommand) {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" return fullCommand.startsWith(\"delete\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" public static boolean isFind(String fullCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":" String[] inputArray \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" return inputArray[0].equals(\"find\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":" private static void testToDo(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" private static void testMarkAndDelete(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":" String[] words \u003d description.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"billieboy7"},"content":" String index \u003d String.join(\" \", Arrays.copyOfRange(words, 1, words.length));","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"billieboy7"},"content":" if (index.isEmpty() || !index.matches(\"-?(0|[1-9]\\\\d*)\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Following \\\"mark\\\" or \\\"unmark\\\" or \\\"delete\\\", an integer value is expected. Blanks or\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"billieboy7"},"content":" \" non-integer values are invalid.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"billieboy7"},"content":" private static void testEvent(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d description.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"billieboy7"},"content":" if (list.length !\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Fill up all fields. Do not forget the \\\"/\\\" symbol before your\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"billieboy7"},"content":" \" start and end time.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"billieboy7"},"content":" String title \u003d list[0].substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"billieboy7"},"content":" String start \u003d list[1].substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"billieboy7"},"content":" String end \u003d list[2].substring(3);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"billieboy7"},"content":" if (start.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"\\\"from\\\" time missing!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"billieboy7"},"content":" } else if (end.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"\\\"to\\\" time missing!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"billieboy7"},"content":" private static void testDeadline(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d description.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"billieboy7"},"content":" if (list.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Fill up all fields. Do not forget the \\\"/\\\" symbol before your\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"billieboy7"},"content":" \" end time.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"billieboy7"},"content":" String time \u003d list[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"billieboy7"},"content":" if (!time.startsWith(\"by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Start with \\\"by\\\".\");","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"billieboy7"},"content":" } else if (time.substring(2).equals(\" \") || time.substring(2).isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"Invalid input. Field Empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":163}},{"path":"src/main/java/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" * Storage class to create objects that manage saving/loading data","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * Constructor for Storage class.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @param filePath file path from which past saved date, if available, should be read from or load to.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" * @param taskList contains the ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public Storage(String filePath, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" * saves data in the given TaskList object to the file specified in the file path.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * @param taskList contains the ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" public void saveList(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" for (Task task : taskList.getTaskArrayList()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" writer.append(task.outputStoreFormat()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"IO exception occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" * loads data from the file specified in the file path.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception for Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" * @throws IOException input/output error when there is an error reading from the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" void loadList() throws DukeException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" FileReader fileReader \u003d new FileReader(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" BufferedReader reader \u003d new BufferedReader(fileReader); // BufferedReader wraps the fileReader","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" String[] inputArray \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" switch (inputArray[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" ToDo toDo \u003d new ToDo(inputArray[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":" int status \u003d Integer.parseInt(inputArray[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" if (status \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" toDo.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":" this.taskList.addTask(toDo);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":" Event event \u003d new Event(inputArray[2], inputArray[3], inputArray[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" if (inputArray[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" event.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" this.taskList.addTask(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":" Deadline deadline \u003d new Deadline(inputArray[2], inputArray[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" if (inputArray[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":" deadline.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" this.taskList.addTask(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"An unexpected error occurred while reading the text file. Error Code:\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" \" 01\");","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":" this.saveList(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" throw new DukeException(\"IO error occurred. Check the formatting of the text file - data.txt.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"billieboy7":119}},{"path":"src/main/java/main/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" * UI class - User Interface - Handles the display shown by the program.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"public class UI {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" * Constructor for UI class.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" public UI() {}","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Generates the divider displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" String printDivider() {","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" String line \u003d \"\\n________________________________________________________\";","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" return line;","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * Generates the welcome message displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" String printWelcomeMessage() {","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" sb.append(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nHello! I\u0027m JARVIS\");","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":"// System.out.println(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" * Lists out the tasks stored in the ArrayList\u003cTask\u003e Object.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" * @param taskArrayList - Contains the list of Tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" public String printList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nThere are no tasks in your list.\");","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nHere are the tasks in your list:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" Task t \u003d taskArrayList.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\" + index + \".\" + t.toString());","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" public String list(ArrayList\u003cTask\u003e taskArrayList, Boolean isMatchingList) {","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nThere are no matching tasks in your list.\");","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" } else if (isMatchingList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nHere are the \" + taskArrayList.size() + \" matching tasks in your list:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" Task t \u003d taskArrayList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\").append(index + \".\" + t.toString());","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nHere are the tasks in your list:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":" Task t \u003d taskArrayList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\").append(index + \".\" + t.toString());","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" * Generates the bye message displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":" public String printByeMessage() {","lastModifiedDate":"2023-09-18"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":" sb.append(this.printDivider());","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":" public String showDelete(String input, TaskList taskList) {","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7)) - 1;","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" sb.append(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\").append(taskList.getTaskArrayList().get(taskIndex));","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":" public static String showAddTask(Task task) {","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nGot it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\").append(task);","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"billieboy7"},"content":" public static String showMarked(Task task) {","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":123,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nNice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\").append(task);","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":128,"author":{"gitId":"billieboy7"},"content":" public static String showUnmarked(Task task) {","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":130,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\nOK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"billieboy7"},"content":" sb.append(\"\\n\").append(task);","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":134,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"billieboy7":134}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" * Deadline class is a subclass of Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" private String time;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter outputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" * Constructor for Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param time user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" public Deadline(String description, String time) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" * Overloaded Constructor for Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" * @param dateTime user provided end time as a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" public Deadline(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" String taskType \u003d \"D\";","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" String isTaskDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" if (this.dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \" + this.time);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" this.dateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), time);","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), dateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"billieboy7":74}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" * Event class is a subclass of Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" private String startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" private String endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter outputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * @param startTime user provided start time.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @param endTime user provided end time.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" public Event(String description, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" * Overloaded Constructor for Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" * @param startDateTime user provided start time as a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" * @param endDateTime user provided end time as a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public Event(String description, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" String taskType \u003d \"E\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" String isTaskDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" if (startDateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \" + this.startTime + \" | \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" this.endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim() + \" | \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" + this.startDateTime.format(outputFormatWithTime) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" this.endDateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" if (startDateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), startTime, endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), startDateTime.format(outputFormatWithTime)","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" , endDateTime.format(outputFormatWithTime));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":80}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":" * Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Constructor for Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" * @param description description provided by user.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" * setter method which updates whether a task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * @param status boolean value which represents whether a task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * true - task is done, false - task is not done","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" public void setTaskDone(boolean status) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" * getter function","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" * @return retrieves the saved description.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" return this.description;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"billieboy7":57}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"import main.UI;","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" * Wrapper class that contains ArrayList of type Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * Constructor for TaskList class.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" public TaskList() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" * Deletes Task from the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the index of the task to be removed.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" public void deleteTask(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7)) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" taskList.remove(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" * Adds Event to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the details of the Event to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" public String addEvent(String input) {","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d input.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" String title \u003d list[0].substring(6);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" String start \u003d list[1].substring(5).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" String end \u003d list[2].substring(3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" // returns 1 if correct datetime","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" // returns 0 if random string input","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" int startTimeFormat \u003d this.computeDateTimeFormat(start);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" int endTimeFormat \u003d this.computeDateTimeFormat(end);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" if (startTimeFormat !\u003d 1 || endTimeFormat !\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" Event event \u003d new Event(title, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" sb.append(UI.showAddTask(event));","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" taskList.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter inputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" LocalDateTime startDateTime \u003d LocalDateTime.parse(start, inputFormatWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" LocalDateTime endDateTime \u003d LocalDateTime.parse(end, inputFormatWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" Event event \u003d new Event(title, startDateTime, endDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" sb.append(UI.showAddTask(event));","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" taskList.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" sb.append(\"Invalid date-time format. Stick to the given format of dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Invalid date-time format. Stick to the given format of dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"billieboy7"},"content":" * Adds Deadline to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the details of the Deadline to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"billieboy7"},"content":" public String addDeadline(String input) {","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"billieboy7"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"billieboy7"},"content":" String[] list \u003d input.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"billieboy7"},"content":" String title \u003d list[0].substring(9);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"billieboy7"},"content":" String time \u003d list[1].substring(3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"billieboy7"},"content":" // returns 1 if correct datetime","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"billieboy7"},"content":" // returns 0 if random string input","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"billieboy7"},"content":" int timeFormat \u003d this.computeDateTimeFormat(time);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"billieboy7"},"content":" if (timeFormat \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"billieboy7"},"content":" Deadline deadline \u003d new Deadline(title, time);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"billieboy7"},"content":" sb.append(UI.showAddTask(deadline));","lastModifiedDate":"2023-09-18"},{"lineNumber":91,"author":{"gitId":"billieboy7"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter inputFormatWithTime \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"billieboy7"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, inputFormatWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"billieboy7"},"content":" Deadline deadline \u003d new Deadline(title, dateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"billieboy7"},"content":" sb.append(UI.showAddTask(deadline));","lastModifiedDate":"2023-09-18"},{"lineNumber":98,"author":{"gitId":"billieboy7"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"billieboy7"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"billieboy7"},"content":" sb.append(\"Invalid date-time format. Stick to the given format of dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"billieboy7"},"content":" System.out.println(\"Invalid date-time format. Stick to the given format of dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"billieboy7"},"content":" return String.valueOf(sb);","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"billieboy7"},"content":" * Adds ToDoTask to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"billieboy7"},"content":" * @param input user input specifying the details of the ToDoTask to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"billieboy7"},"content":" public String addToDo(String input) throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"billieboy7"},"content":" ToDo toDo \u003d new ToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"billieboy7"},"content":" String message \u003d UI.showAddTask(toDo);","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"billieboy7"},"content":" taskList.add(toDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"billieboy7"},"content":" return message;","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"billieboy7"},"content":" * Generic method to add tasks to the Task List.","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"billieboy7"},"content":" * @param task task object to be added to the tasks list.","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"billieboy7"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"billieboy7"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"billieboy7"},"content":" * marks the specific task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"billieboy7"},"content":" * @param taskIndex index of the task to be marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"billieboy7"},"content":" public String mark(int taskIndex) {","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"billieboy7"},"content":" Task currTask \u003d taskList.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"billieboy7"},"content":" currTask.setTaskDone(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"billieboy7"},"content":" return UI.showMarked(currTask);","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"billieboy7"},"content":" * unmarks the specific task.","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"billieboy7"},"content":" * @param taskIndex index of the task to be unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"billieboy7"},"content":" public String unmark(int taskIndex) {","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"billieboy7"},"content":" Task currTask \u003d taskList.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"billieboy7"},"content":" currTask.setTaskDone(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"billieboy7"},"content":" return UI.showUnmarked(currTask);","lastModifiedDate":"2023-09-18"},{"lineNumber":144,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"billieboy7"},"content":" * size() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"billieboy7"},"content":" * @return number of tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"billieboy7"},"content":" public int getSize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"billieboy7"},"content":" return taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"billieboy7"},"content":" * Checks whether given string is made up of just numbers.","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"billieboy7"},"content":" * @param strNum string to be tested.","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"billieboy7"},"content":" * @return true - is numeric, false - not numeric.","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"billieboy7"},"content":" public static boolean isNumeric(String strNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"billieboy7"},"content":" if (strNum \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"billieboy7"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"billieboy7"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"billieboy7"},"content":" double d \u003d Double.parseDouble(strNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"billieboy7"},"content":" } catch (NumberFormatException nfe) {","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"billieboy7"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"billieboy7"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"billieboy7"},"content":" * The method is used to identify dates in the below Local Date Time format :","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"billieboy7"},"content":" * \"dd-MM-yyyy HHmm\" with HHmm in the 24 hour format. Note: This method only checks for the","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"billieboy7"},"content":" * structure of the input. The validity of the Local Date Time Format is validated/tested later.","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"billieboy7"},"content":" * The method will return 1 if it is in LocalDateTimeFormat, 0 if it is a custom string format","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"billieboy7"},"content":" * @param input string to run the test on.","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"billieboy7"},"content":" * @return 1 or 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"billieboy7"},"content":" int computeDateTimeFormat(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"billieboy7"},"content":" // returns 1 if correct datetime","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"billieboy7"},"content":" // returns 2 if correct date","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"billieboy7"},"content":" // returns 0 if random string input","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"billieboy7"},"content":" // Assume that the date input is dd/MM/yyyy 16-08-1977 1800","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"billieboy7"},"content":" String[] blankArray \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"billieboy7"},"content":" // Check for datetime input","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"billieboy7"},"content":" if (blankArray.length \u003d\u003d 2 \u0026\u0026 isNumeric(blankArray[1])) {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"billieboy7"},"content":" String[] slashArray \u003d blankArray[0].split(\"-\");","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"billieboy7"},"content":" boolean isAllNumeric \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"billieboy7"},"content":" for (String s : slashArray) {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"billieboy7"},"content":" if (!isNumeric(s)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"billieboy7"},"content":" isAllNumeric \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"billieboy7"},"content":" if (slashArray.length \u003d\u003d 3 \u0026\u0026 isAllNumeric) {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"billieboy7"},"content":" return 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"billieboy7"},"content":" return 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"billieboy7"},"content":" * getter method.","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"billieboy7"},"content":" * @return ArrayList of Task objects.","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"billieboy7"},"content":" public ArrayList\u003cTask\u003e getTaskArrayList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"billieboy7"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"billieboy7":215}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":" * ToDo class is a subclass of Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" * Constructor for ToDo class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" * @param description user provided description.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" * @throws DukeException organic exception by Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" public ToDo(String description) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" * storeFormat() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" * @return the specific format in which the task should be saved in the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" public String outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" String taskType \u003d \"T\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" String isTaskDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" isTaskDone \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" return (taskType + \" | \" + isTaskDone + \" | \" + this.description.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" * toString() method.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":" * @return string text of the task in which the task will be displayed in the terminal.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"billieboy7":45}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"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-17"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"}],"authorContributionMap":{"billieboy7":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"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\"gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"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-17"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"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-17"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"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-17"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-17"}],"authorContributionMap":{"billieboy7":19}},{"path":"src/test/java/main/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"//Underscores may be used in test method names using the","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"// following three part format featureUnderTest_testScenario_expectedBehavior()","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":"// Testing the Parser.parse() method","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" public void parse_correctByeInput() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" assertEquals(new ByeCommand().isContinue(), Parser.parse(\"bye\").isContinue());","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" public void parse_incorrectByeInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"bye bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"billieboy7"},"content":" public void parse_inputStartingWithEvent_shouldReturnEventCommandParseTest() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"billieboy7"},"content":" assertEquals(EventCommand.class, Parser.parse(\"event Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"billieboy7"},"content":" \"/from 02-08-2023 1800 /to 02-08-2023 2200\").getClass());","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"billieboy7"},"content":" public void parse_eventSpellingMistake_shouldReturnDukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"evennt Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"billieboy7"},"content":" \"/from 02-08-2023 1800 /to 02-08-2023 2200\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"billieboy7"},"content":" public void parse_notIndicatingTo_shouldReturnDukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"evennt Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"billieboy7"},"content":" \"/from 02-08-2023 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"billieboy7"},"content":" public void parse_notIndicatingFrom_shouldReturnDukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"billieboy7"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"billieboy7"},"content":" () -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"billieboy7"},"content":" Parser.parse(\"evennt Amma Birthday Dinner \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"billieboy7"},"content":" \"/to 02-08-2023 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"billieboy7"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"billieboy7":66}},{"path":"src/test/java/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" public void outputStoreFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":" assertEquals(\"D | 0 | homework | tomorrow\", new Deadline(\"homework\",","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":" \"tomorrow\").outputStoreFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" assertEquals(\"D | 0 | clean room | tonight 8pm\", new Deadline(\"clean room\",","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" \"tonight 8pm\").outputStoreFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" assertEquals(\"D | 0 | watch movie | 16 Aug 1977 2:00AM\", new Deadline(\"watch movie\",","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" LocalDateTime.parse(\"16-08-1977 0200\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"))).outputStoreFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"billieboy7":25}},{"path":"src/test/java/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"billieboy7"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"billieboy7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"billieboy7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"billieboy7"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"billieboy7"},"content":" // Test - private int computeDateTimeFormat(String input)","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"billieboy7"},"content":" // The method is used to identify dates in the below Local Date Time format :","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"billieboy7"},"content":" // \"dd-MM-yyyy HHmm\" with HHmm in the 24 hour format. Note: This method only checks for the","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"billieboy7"},"content":" // structure of the input. The validity of the Local Date Time Format is validated/tested later.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"billieboy7"},"content":" // The method will return 1 if it is in LocalDateTimeFormat, 0 if it is a custom string format","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"billieboy7"},"content":" public void computeDateTimeFormat_localDateTimeInput_shouldReturnOne() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"billieboy7"},"content":" TaskList task \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"billieboy7"},"content":" String input \u003d \"16-08-1977 1700\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"billieboy7"},"content":" assertEquals(1, task.computeDateTimeFormat(input));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"billieboy7"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"billieboy7"},"content":" public void computeDateTimeFormat_customInput_shouldReturnZero() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"billieboy7"},"content":" TaskList task \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"billieboy7"},"content":" String input \u003d \"16 August 1977 5pm\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"billieboy7"},"content":" assertEquals(0, task.computeDateTimeFormat(input));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"billieboy7"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"billieboy7"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"billieboy7"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"billieboy7":33}}] diff --git a/billieboy7_ip_master/commits.json b/billieboy7_ip_master/commits.json index f3b6a643..29cac37a 100644 --- a/billieboy7_ip_master/commits.json +++ b/billieboy7_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"billieboy7":[{"date":"2023-08-23","commitResults":[{"hash":"fcf1031860e9fc7b36c730d2ceb1e43356dc7eb9","isMergeCommit":false,"messageTitle":"test","messageBody":"","tags":["test"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c7313997e4c0e361cad9c064f654ba4c51f30652","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"c1ec3f1335043175c02f5cdef10b165694911ea4","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":6}}},{"hash":"d8a3f888fbfb53d47ae8574cfb2fb7e240ca4805","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"4f65a093ad90f407f3c9271ce3025f19a2483983","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":8}}},{"hash":"5280c6a2c2532345cb8b5582b3fb13f5072603d2","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":31}}},{"hash":"ba568193134f1f65e5d325c829c9e18d6ae1c130","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":135,"deletions":39}}},{"hash":"31e51bbc016eb9772f642f6d6fd385ac2f1a4624","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"ae06ae9e5e09639e0e981c9b9ae5bebbb72b8357","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}}]},{"date":"2023-08-29","commitResults":[{"hash":"838dc430c0205bcae1f6fd961517653050fe862c","isMergeCommit":false,"messageTitle":"test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":9},"java":{"insertions":5,"deletions":3},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a29ce9cb05b5773e18e1fc4ca7ed0f9a20654dd0","isMergeCommit":false,"messageTitle":"branch-Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":256,"deletions":56}}},{"hash":"5d66dcef38afcbe87fdcfd76ab8882b265049bc0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"5ae3a1f9ccceaeb6b3971ad6039cd3a03ebb90aa","isMergeCommit":false,"messageTitle":"branch-Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":158,"deletions":16}}},{"hash":"3a82580fd9c06ec181d89ac540a6205a07cf5d53","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c006afbdd4e7fcab014c385a826fe4095f8ce1a8","isMergeCommit":false,"messageTitle":"Implemented Storage class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":158,"deletions":94}}}]},{"date":"2023-09-02","commitResults":[{"hash":"db5d154693c14e82d74d3fa155465994aad160aa","isMergeCommit":false,"messageTitle":"Implemented most of UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":118}}},{"hash":"8d708a46c70f2a75d22ccfac616550d5ed3b043a","isMergeCommit":false,"messageTitle":"Command class implemented. Yet to solve IO exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":277,"deletions":118}}},{"hash":"b5e9fc8746aa810f84f90034bb82451ab7dcbe85","isMergeCommit":false,"messageTitle":"Yet to Solve Mark/Unmark - Save changes issue","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":43}}},{"hash":"0b252e4399f7de932ca4587acc97720aeec47e1c","isMergeCommit":false,"messageTitle":"IO exception resolved","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":18}}},{"hash":"c7810f5502e97292310d930c7f66d202b2eb3117","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e9e5b671fab5c08eb30e7a30bec59b2b0859b668","isMergeCommit":false,"messageTitle":"branch-A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":37},"md":{"insertions":2,"deletions":2}}},{"hash":"3209cf80a3a29bb69a935ab00e4b812336aec2c0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"67f0ea5bd7ee777d3363a2a5a92ffe027287b7da","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into fetch-gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"472e7ca40d06937bd927d4f8871bbfbc59b9106f","isMergeCommit":true,"messageTitle":"Merge branch \u0027fetch-gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1fadc4ca46a59f1d1a8324b11ae1d5f2cfe7a8d4","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":31,"deletions":8}}},{"hash":"9ad529826a515f2e271e33ef7bc945fbc5dac887","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"67f6f00bf0737ea5dd5791cc511385e6bb16e7fe","isMergeCommit":false,"messageTitle":"branch-A-Junit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":127,"deletions":7}}},{"hash":"8b83acb25a44d154c728184403c0fa5ca4d39bc4","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Junit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"9de8b99755360ad94075a5f3c74b30acdc24442c","isMergeCommit":false,"messageTitle":"Solve coding standard issues on a separate branch of master","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":385,"deletions":65}}},{"hash":"25bab45c0a9cbcfd0585be8ebba56ccbb069fe67","isMergeCommit":false,"messageTitle":"Continue editing from ByeCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":83},"md":{"insertions":2,"deletions":2}}},{"hash":"423145a6449b6eaafe0b7a0c9ee60e495787423d","isMergeCommit":false,"messageTitle":"done with Coding Standard. Check for compliance in future versions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":117}}}]},{"date":"2023-09-05","commitResults":[{"hash":"f76a48a2882f5d8185d88fd43def6ee5b2468019","isMergeCommit":false,"messageTitle":"done with find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":33}}},{"hash":"4487008c2cb14b4dc9fd27caf97e4e9c6c49f37b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"678ea6ffe6bdea7849dec23972e3fad818a89fe4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3ceaac5370c8255467a9f7f47657f557b631663","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":17,"deletions":1}}},{"hash":"d8a83a690a092c052aed49c6ba2e43a6dea90995","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"237dc5a1a4587f074be48483cf274346727c7c49","isMergeCommit":false,"messageTitle":"add Find feature","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":4,"deletions":0},"java":{"insertions":31,"deletions":19}}}]},{"date":"2023-09-08","commitResults":[{"hash":"e7e3f6e9e5144a6a3b9667f6d0b2a36fe21fcd1a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":35,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"billieboy7":{"java":1435,"md":35,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":4}},"authorContributionVariance":{"billieboy7":72101.34},"authorDisplayNameMap":{"billieboy7":"CS2103T-T08-4 STAL..UMAR"}} +{"authorDailyContributionsMap":{"billieboy7":[{"date":"2023-08-23","commitResults":[{"hash":"fcf1031860e9fc7b36c730d2ceb1e43356dc7eb9","isMergeCommit":false,"messageTitle":"test","messageBody":"","tags":["test"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c7313997e4c0e361cad9c064f654ba4c51f30652","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"c1ec3f1335043175c02f5cdef10b165694911ea4","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":6}}},{"hash":"d8a3f888fbfb53d47ae8574cfb2fb7e240ca4805","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"4f65a093ad90f407f3c9271ce3025f19a2483983","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":8}}},{"hash":"5280c6a2c2532345cb8b5582b3fb13f5072603d2","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":31}}},{"hash":"ba568193134f1f65e5d325c829c9e18d6ae1c130","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":135,"deletions":39}}},{"hash":"31e51bbc016eb9772f642f6d6fd385ac2f1a4624","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"ae06ae9e5e09639e0e981c9b9ae5bebbb72b8357","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}}]},{"date":"2023-08-29","commitResults":[{"hash":"838dc430c0205bcae1f6fd961517653050fe862c","isMergeCommit":false,"messageTitle":"test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":9},"java":{"insertions":5,"deletions":3},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a29ce9cb05b5773e18e1fc4ca7ed0f9a20654dd0","isMergeCommit":false,"messageTitle":"branch-Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":256,"deletions":56}}},{"hash":"5d66dcef38afcbe87fdcfd76ab8882b265049bc0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"5ae3a1f9ccceaeb6b3971ad6039cd3a03ebb90aa","isMergeCommit":false,"messageTitle":"branch-Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":158,"deletions":16}}},{"hash":"3a82580fd9c06ec181d89ac540a6205a07cf5d53","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c006afbdd4e7fcab014c385a826fe4095f8ce1a8","isMergeCommit":false,"messageTitle":"Implemented Storage class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":158,"deletions":94}}}]},{"date":"2023-09-02","commitResults":[{"hash":"db5d154693c14e82d74d3fa155465994aad160aa","isMergeCommit":false,"messageTitle":"Implemented most of UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":118}}},{"hash":"8d708a46c70f2a75d22ccfac616550d5ed3b043a","isMergeCommit":false,"messageTitle":"Command class implemented. Yet to solve IO exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":277,"deletions":118}}},{"hash":"b5e9fc8746aa810f84f90034bb82451ab7dcbe85","isMergeCommit":false,"messageTitle":"Yet to Solve Mark/Unmark - Save changes issue","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":43}}},{"hash":"0b252e4399f7de932ca4587acc97720aeec47e1c","isMergeCommit":false,"messageTitle":"IO exception resolved","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":18}}},{"hash":"c7810f5502e97292310d930c7f66d202b2eb3117","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e9e5b671fab5c08eb30e7a30bec59b2b0859b668","isMergeCommit":false,"messageTitle":"branch-A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":37},"md":{"insertions":2,"deletions":2}}},{"hash":"3209cf80a3a29bb69a935ab00e4b812336aec2c0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"67f0ea5bd7ee777d3363a2a5a92ffe027287b7da","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into fetch-gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"472e7ca40d06937bd927d4f8871bbfbc59b9106f","isMergeCommit":true,"messageTitle":"Merge branch \u0027fetch-gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1fadc4ca46a59f1d1a8324b11ae1d5f2cfe7a8d4","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":31,"deletions":8}}},{"hash":"9ad529826a515f2e271e33ef7bc945fbc5dac887","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"67f6f00bf0737ea5dd5791cc511385e6bb16e7fe","isMergeCommit":false,"messageTitle":"branch-A-Junit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":127,"deletions":7}}},{"hash":"8b83acb25a44d154c728184403c0fa5ca4d39bc4","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Junit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"9de8b99755360ad94075a5f3c74b30acdc24442c","isMergeCommit":false,"messageTitle":"Solve coding standard issues on a separate branch of master","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":385,"deletions":65}}},{"hash":"25bab45c0a9cbcfd0585be8ebba56ccbb069fe67","isMergeCommit":false,"messageTitle":"Continue editing from ByeCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":83},"md":{"insertions":2,"deletions":2}}},{"hash":"423145a6449b6eaafe0b7a0c9ee60e495787423d","isMergeCommit":false,"messageTitle":"done with Coding Standard. Check for compliance in future versions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":117}}}]},{"date":"2023-09-05","commitResults":[{"hash":"f76a48a2882f5d8185d88fd43def6ee5b2468019","isMergeCommit":false,"messageTitle":"done with find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":33}}},{"hash":"4487008c2cb14b4dc9fd27caf97e4e9c6c49f37b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"678ea6ffe6bdea7849dec23972e3fad818a89fe4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3ceaac5370c8255467a9f7f47657f557b631663","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":17,"deletions":1}}},{"hash":"d8a83a690a092c052aed49c6ba2e43a6dea90995","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"237dc5a1a4587f074be48483cf274346727c7c49","isMergeCommit":false,"messageTitle":"add Find feature","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":4,"deletions":0},"java":{"insertions":31,"deletions":19}}}]},{"date":"2023-09-08","commitResults":[{"hash":"e7e3f6e9e5144a6a3b9667f6d0b2a36fe21fcd1a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":35,"deletions":24}}}]},{"date":"2023-09-17","commitResults":[{"hash":"92a80c8f0fc6254e81aeef94a56f159f1547d3a3","isMergeCommit":false,"messageTitle":"Clean up UI usage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":0,"deletions":4},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":45,"deletions":23}}}]},{"date":"2023-09-18","commitResults":[{"hash":"e0794dcb2aff8f4bd568b3324c48bcb9861d961a","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":309,"deletions":92}}},{"hash":"3b40af6d5fc4b0465b234a33d43785072accd210","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"billieboy7":{"java":1674,"md":35,"fxml":36,"sh":0,"bat":0,"gradle":16,"txt":4}},"authorContributionVariance":{"billieboy7":56556.51},"authorDisplayNameMap":{"billieboy7":"CS2103T-T08-4 STAL..UMAR"}} diff --git a/chiayunrong_ip_master/authorship.json b/chiayunrong_ip_master/authorship.json index df368347..b728b94f 100644 --- a/chiayunrong_ip_master/authorship.json +++ b/chiayunrong_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":"chiayunrong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-03"},{"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":"chiayunrong"},"content":" mainClass.set(\"Alpha\")","lastModifiedDate":"2023-08-27"},{"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":"chiayunrong"},"content":" archiveBaseName \u003d \"alpha\"","lastModifiedDate":"2023-08-27"},{"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":"chiayunrong"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.base\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"chiayunrong":9,"-":40}},{"path":"data/save.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"1","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"todo asdf","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"0","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"Alpha is a text-based to do list chat bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"* [Features](#features)","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" * [Adding to do task](#adding-to-do-task-todo)","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" * [Adding deadline task](#adding-deadline-task-deadline)","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * [Adding event task](#adding-event-task-event)","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * [Listing all tasks](#listing-all-tasks-list)","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * [Deleting task](#deleting-task-delete)","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" * [Marking task](#marking-task-mark)","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * [Unmarking task](#unmarking-task-unmark)","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * [Finding task](#finding-task-find)","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * [Exiting the program](#exiting-the-program-bye)","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * [Saving the data](#saving-the-data)","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"### Adding to do task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"Add to do task into the list of tasks. Name of the task must be unique.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"Format: `todo [task name]`","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":"* `todo read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":"* `todo study for midterms`","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"### Adding deadline task: `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"Add deadline task to list of tasks. Name of the task must be unique.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"Format: `deadline [task name] /by [yyyy-MM-dd HH:mm]`","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"* `deadline read book /by 2023-10-10 23:59`","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"* `deadline study for midterms /by 2023-11-06 08:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":"### Adding event task: `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"Add event task to list of tasks. Name of the task must be unique.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":"Format: `event [task name] /from [yyyy-MM-dd HH:mm] /to [yyyy-MM-dd HH:mm]`","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":"* `event read book /from 2023-10-10 20:00 /to 2023-10-11 00:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":"* `event midterms /from 2023-06-03 13:00 /to 2023-06-03 14:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":"Shows the list of all tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":"### Deleting task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":"Deletes the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":"Format: `delete [index of task]`","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":"* `delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":"* `delete 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"### Marking task: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":"Checks the specified task as completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":"Format: `mark [index of task]`","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":"* `mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"* `mark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":"### Unmarking task: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":"Checks the specified task as uncompleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":"Format: `unmark [index of task]`","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":"* `unmark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"* `unmark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":"### Finding task: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":"Shows the specific task with task name that contains the given input.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":"Format `find [search string]`","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":"* `find read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":"* `find midterms`","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":"### Exiting the program: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":"Saves task list into local storage and exits the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":"Format `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":"### Saving the data","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":"Tasks will only be saved upon exiting through the `bye` command.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":"## FAQ","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":"**Q**: How do I transfer my data to another Computer?","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":98,"author":{"gitId":"chiayunrong"},"content":"**A**: Install the app in the other computer and transfer the save file over. ","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"chiayunrong"},"content":"The save file should be located under data/save.txt","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"chiayunrong":73,"-":26}},{"path":"src/main/java/Alpha.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.ui.DialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * The Alpha class.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"public class Alpha extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" private final Image userPicture \u003d new Image(this.getClass().getResourceAsStream(\"redbloon.jpg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" private final Image alphaPicture \u003d new Image(this.getClass().getResourceAsStream(\"bluebloon.jpg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" private Processor processor;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" private Stage stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" initializeObjects(stage);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" configureStage();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" configureScrollPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" configureDialogContainer();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" configureAnchorPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" configureSendButton();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" configureUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" welcome();","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" private void initializeObjects(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" processor \u003d new Processor(\"./data/save.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" private void configureStage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" Scene scene \u003d new Scene(mainLayout); // Setting the scene to be our Label","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" stage.setScene(scene); // Setting the stage to show our screen","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" stage.setTitle(\"Alpha\");","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" private void configureScrollPane() {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":" private void configureDialogContainer() {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":" private void configureAnchorPane() {","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"chiayunrong"},"content":" private void configureSendButton() {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"chiayunrong"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":" handleUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"chiayunrong"},"content":" private void configureUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"chiayunrong"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"chiayunrong"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"chiayunrong"},"content":" handleUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"chiayunrong"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"chiayunrong"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"chiayunrong"},"content":" String alphaResponse \u003d processor.processInput(userInput.getText());","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"chiayunrong"},"content":" if (alphaResponse.equals(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"chiayunrong"},"content":" goodbye();","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"chiayunrong"},"content":" saveTaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"chiayunrong"},"content":" exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"chiayunrong"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"chiayunrong"},"content":" updateUi(userInput.getText(), alphaResponse);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"chiayunrong"},"content":" private void welcome() {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"chiayunrong"},"content":" Label welcomeText \u003d new Label(\"Hello! I\u0027m Alpha.\\n\" + \"What can I do for you?\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.getChildren().add(DialogBox.getAlphaDialog(welcomeText, new ImageView(alphaPicture)));","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"chiayunrong"},"content":" private void goodbye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"chiayunrong"},"content":" Label goodbyeText \u003d new Label(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.getChildren().add(DialogBox.getAlphaDialog(goodbyeText, new ImageView(alphaPicture)));","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"chiayunrong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"chiayunrong"},"content":" private void saveTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"chiayunrong"},"content":" processor.saveTaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"chiayunrong"},"content":" private void exit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"chiayunrong"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(1));","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"chiayunrong"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"chiayunrong"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"chiayunrong"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"chiayunrong"},"content":" pause.play();","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"chiayunrong"},"content":" private void updateUi(String userText, String alphaText) {","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"chiayunrong"},"content":" Label user \u003d new Label(userText);","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"chiayunrong"},"content":" Label alpha \u003d new Label(alphaText);","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"chiayunrong"},"content":" DialogBox.getUserDialog(user, new ImageView(userPicture)),","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"chiayunrong"},"content":" DialogBox.getAlphaDialog(alpha, new ImageView(alphaPicture))","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"chiayunrong"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"chiayunrong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":150,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":151,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":151}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The Launcher class.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The entry point of application.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * @param args The input arguments.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" Application.launch(Alpha.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":16}},{"path":"src/main/java/Processor.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.TaskParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * The Processor class used to process user inputs/commands.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class Processor {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Processor.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param filePath The file path to the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" public Processor(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" taskList \u003d new TaskList(storage.load().getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" } catch (IOException | InvalidTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" * Process and execute user commands.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" * @return The output of executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" public String processInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" Command command \u003d TaskParser.parse(input, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" return command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" } catch (InvalidTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" * Save task list to local storage file..","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" public void saveTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" storage.save(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":58}},{"path":"src/main/java/com/alpha/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Bye command.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Bye command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" public ByeCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" super(null);","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" return \"bye\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":19}},{"path":"src/main/java/com/alpha/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" * The type Command.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Command.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" public Command(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * Gets task list size.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" public int getTaskListSize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return taskList.getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" * Gets task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" * @return the task list","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" return taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * Execute the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @return the string","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":45}},{"path":"src/main/java/com/alpha/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * The type Deadline command.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private final Task task;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Deadline command.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" public DeadlineCommand(String name, LocalDateTime end, TaskList taskList) throws DuplicateTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" for (Task currentTasks : taskList.getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" if (currentTasks.getName().equals(name)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" task \u003d new Deadline(name, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" getTaskList().addTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":41}},{"path":"src/main/java/com/alpha/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Delete command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Delete command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public DeleteCommand(int index, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d super.getTaskList().deleteTask(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":30}},{"path":"src/main/java/com/alpha/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * The type Event command.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private final Task task;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Event command.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param start The start datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public EventCommand(String name, LocalDateTime start, LocalDateTime end, TaskList taskList)","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" throws DuplicateTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" for (Task currentTasks : taskList.getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" if (currentTasks.getName().equals(name)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" this.task \u003d new Event(name, start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" getTaskList().addTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":42}},{"path":"src/main/java/com/alpha/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Find command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final String searchString;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Find command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param searchString The search string.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public FindCommand(String searchString, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.searchString \u003d searchString;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" for (Task task : getTaskList().getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" if (task.getName().contains(searchString)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" String row \u003d count++ + \".\" + task + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" sb.append(row);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" return sb.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"chiayunrong":39}},{"path":"src/main/java/com/alpha/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid command.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid command.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" super(null);","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" return \"Please enter a valid command.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":19}},{"path":"src/main/java/com/alpha/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type List command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new List command.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" for (Task task : getTaskList().getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" String row \u003d count++ + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" sb.append(row);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" return sb.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":31}},{"path":"src/main/java/com/alpha/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Mark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Mark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public MarkCommand(int index, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d super.getTaskList().markTask(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":29}},{"path":"src/main/java/com/alpha/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The type To do command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final Task task;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new To do command.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public ToDoCommand(String name, TaskList taskList) throws DuplicateTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" for (Task currentTasks : taskList.getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" if (currentTasks.getName().equals(name)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" task \u003d new ToDo(name);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" getTaskList().addTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":37}},{"path":"src/main/java/com/alpha/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Unmark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Unmark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public UnmarkCommand(int index, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d super.getTaskList().unmarkTask(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":29}},{"path":"src/main/java/com/alpha/enums/MarkEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.enums;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The enum Mark enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public enum MarkEnum {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Done mark enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" DONE(\"X\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * Notdone mark enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" NOTDONE(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" private final String mark;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" MarkEnum(String mark) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" this.mark \u003d mark;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" return this.mark;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"chiayunrong":27}},{"path":"src/main/java/com/alpha/enums/TagEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.enums;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The enum Tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public enum TagEnum {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * Todo tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" TODO(\"T\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * Deadline tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" DEADLINE(\"D\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Event tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" EVENT(\"E\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * Empty tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" EMPTY(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" private final String tag;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" TagEnum(String tag) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" return this.tag;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"chiayunrong":34}},{"path":"src/main/java/com/alpha/exceptions/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.exceptions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" * @param message the message","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" public InvalidDateTimeException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" super(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid date time format exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidDateTimeFormatException extends InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid date time format exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" public InvalidDateTimeFormatException() {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" super(\"Please ensure date time is in the following format: yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":27}},{"path":"src/main/java/com/alpha/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid task exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid task exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid to do exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidToDoException extends InvalidTaskException {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid to do exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" public InvalidToDoException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" super(message","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" + \"Please ensure that the format is as follows:\\n \"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" + \"todo \u003ctask name\u003e\");","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid deadline exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidDeadlineException extends InvalidTaskException {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid deadline exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public InvalidDeadlineException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" super(message","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" + \"Please ensure that the format is as follows:\\n \"","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" + \"deadline \u003ctask name\u003e /by \u003cyyyy-MM-dd HH:mm\u003e\");","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid event exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidEventException extends InvalidTaskException {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid event exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" public InvalidEventException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" super(message","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" + \"Please ensure that the format is as follows:\\n \"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" + \"event \u003ctask name\u003e /from \u003cyyyy-MM-dd HH:mm\u003e /to \u003cyyyy-MM-dd HH:mm\u003e\");","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" * The type Duplicate task exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" public static class DuplicateTaskException extends InvalidTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" public DuplicateTaskException() {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" super(\"Task is already in the list.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":76}},{"path":"src/main/java/com/alpha/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.MarkEnum;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.TaskParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * The Storage class.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" private final File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" * @param filePath File path to the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" * @throws IOException The io exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" public Storage(String filePath) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" * Load task list from the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" * @return The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * @throws FileNotFoundException The file not found exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidTaskException The invalid task exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidDateTimeException The invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public TaskList load() throws FileNotFoundException, InvalidTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" Command command \u003d TaskParser.parse(sc.nextLine(), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" * Save the current task list into the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" * @throws IOException The io exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" public void save(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" StringBuilder row \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" row.append(task.toStorageString());","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" if (task.getMark() \u003d\u003d MarkEnum.DONE) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" row.append(\"\\nmark \");","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" row.append(count);","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" row.append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" fw.write(row.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" ++count;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":76}},{"path":"src/main/java/com/alpha/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.DateTimeParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The Deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public Deadline(String name, LocalDateTime end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" super(name);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" this.setTag(TagEnum.DEADLINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" public String toStorageString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" return \"deadline \"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" + getName()","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" + \" /by \"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToStore(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" return super.toString()","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" + \" (by: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToDisplay(end)","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":42}},{"path":"src/main/java/com/alpha/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.DateTimeParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The Event task..","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param start The start datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" public Event(String name, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" super(name);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" this.setTag(TagEnum.EVENT);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" public String toStorageString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" return \"event \"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" + getName()","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" + \" /from \"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToStore(start)","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" + \" /to \"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToStore(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" return super.toString()","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" + \"(from: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToDisplay(start)","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" + \" to: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToDisplay(end)","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":50}},{"path":"src/main/java/com/alpha/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.MarkEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * The type Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" private final String name;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private TagEnum tag;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" private MarkEnum mark;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * @param name the name","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" this.tag \u003d TagEnum.EMPTY;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" this.mark \u003d MarkEnum.NOTDONE;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" * Returns the task as a string to be stored in the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" public abstract String toStorageString();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" * Sets the tag of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" * @param tag The tag of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" public void setTag(TagEnum tag) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" * Gets the mark of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" * @return The mark of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" public MarkEnum getMark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" return mark;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" * Sets the mark of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" * @param mark The mark of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" public void setMark(MarkEnum mark) {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" this.mark \u003d mark;","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" * @return The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" public String getName() {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" return name;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" private String wrap(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" return \"[\" + text + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":" return wrap(this.tag.toString()) + wrap(this.mark.toString()) + \" \" + this.name;","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":78}},{"path":"src/main/java/com/alpha/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.MarkEnum;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The Task list class.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Task list with a given list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" * Add task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" * Gets size of the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" * Mark task as done.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" * @return The marked task.","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" public Task markTask(int taskNumber) {","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" task.setMark(MarkEnum.DONE);","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" * Mark task as undone.","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" * @return The unmarked task.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":" public Task unmarkTask(int taskNumber) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"chiayunrong"},"content":" task.setMark(MarkEnum.NOTDONE);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":" * Delete task from task list..","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":" public Task deleteTask(int taskNumber) {","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"chiayunrong"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":" tasks.remove(task);","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"chiayunrong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":96}},{"path":"src/main/java/com/alpha/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" * The type To do.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new To do.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" super(name);","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" this.setTag(TagEnum.TODO);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public String toStorageString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" return \"todo \" + getName();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":24}},{"path":"src/main/java/com/alpha/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * The Dialog box class.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" private final Label text;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" private final ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param l The label.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * @param iv The image view.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" text \u003d l;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" * Gets user dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * @param l The label.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" * @param iv The image view.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @return The user dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" * Gets alpha dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" * @param l The label.","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" * @param iv The image view.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" * @return The alpha dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" public static DialogBox getAlphaDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":67}},{"path":"src/main/java/com/alpha/utils/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.utils;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The Date time parser utility class.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class DateTimeParser {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private DateTimeParser() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" * Parse date time string from yyyy-MM-dd HH:mm into a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param text The text to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * @return The LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" public static LocalDateTime parseDateTimeString(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" return LocalDateTime.parse(text, formatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" * Parse LocalDateTime object into a string to be displayed.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" * @param localDateTime The LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" * @return The parsed string.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" public static String parseDateTimeObjectToDisplay(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" return localDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" * Parse LocalDateTime object into a string to be stored into the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" * @param localDateTime The LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" * @return The parsed string.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" public static String parseDateTimeObjectToStore(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" return localDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":44}},{"path":"src/main/java/com/alpha/utils/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.utils;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.ByeCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.Command;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.DeadlineCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.DeleteCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.EventCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.FindCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.InvalidCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.ListCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.MarkCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.ToDoCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.UnmarkCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.InvalidDeadlineException;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.InvalidEventException;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.InvalidToDoException;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" * The Task parser utility class.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"public class TaskParser {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" private TaskParser() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" private static String getFindSearchString(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" return text.replaceFirst(\"find\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" private static String getToDoName(String text) throws InvalidToDoException {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"todo\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" if (result.isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidToDoException(\"Unable to find todo name.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" private static String getDeadlineName(String text) throws InvalidDeadlineException {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"deadline\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastBy \u003d result.lastIndexOf(\"/by \");","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastBy \u003d\u003d -1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDeadlineException(\"Unable to find deadline name.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" return result.substring(0, indexOfLastBy - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" private static LocalDateTime getDeadlineEnd(String text)","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" throws InvalidDeadlineException, InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"deadline\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastBy \u003d result.lastIndexOf(\"/by \");","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastBy \u003d\u003d -1 || indexOfLastBy + 4 \u003e\u003d result.length()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDeadlineException(\"Unable to find deadline end date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" return DateTimeParser.parseDateTimeString(result.substring(indexOfLastBy + 4));","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" private static String getEventName(String text) throws InvalidEventException {","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"event\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastFrom \u003d result.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastFrom \u003d\u003d -1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidEventException(\"Unable to find event name.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" return result.substring(0, indexOfLastFrom);","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":" private static LocalDateTime getEventStart(String text)","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":" throws InvalidEventException, InvalidDateTimeFormatException {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"event\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastFrom \u003d result.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastTo \u003d result.lastIndexOf(\"/to\");","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastFrom \u003d\u003d -1 || indexOfLastTo \u003d\u003d -1 || indexOfLastFrom + 6 \u003e\u003d indexOfLastTo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidEventException(\"Unable to find event start date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"chiayunrong"},"content":" return DateTimeParser.parseDateTimeString(result.substring(indexOfLastFrom + 6, indexOfLastTo - 1));","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":" private static LocalDateTime getEventEnd(String text)","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":" throws InvalidEventException, InvalidDateTimeFormatException {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"event\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastTo \u003d result.lastIndexOf(\"/to \");","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastTo \u003d\u003d -1 || indexOfLastTo + 4 \u003e\u003d result.length()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidEventException(\"Unable to find event end date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"chiayunrong"},"content":" return DateTimeParser.parseDateTimeString(result.substring(indexOfLastTo + 4));","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"chiayunrong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"chiayunrong"},"content":" * Parse command from the user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"chiayunrong"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"chiayunrong"},"content":" * @return The command.","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidTaskException The invalid task exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidDateTimeException The invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"chiayunrong"},"content":" public static Command parse(String userInput, TaskList taskList)","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"chiayunrong"},"content":" throws InvalidTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"chiayunrong"},"content":" String[] tokens \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"chiayunrong"},"content":" switch (tokens[0]) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"chiayunrong"},"content":" case \"list\":","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"chiayunrong"},"content":" return new ListCommand(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"chiayunrong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"chiayunrong"},"content":" return new MarkCommand(Integer.parseInt(tokens[1]), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"chiayunrong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"chiayunrong"},"content":" return new UnmarkCommand(Integer.parseInt(tokens[1]), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"chiayunrong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"chiayunrong"},"content":" return new DeleteCommand(Integer.parseInt(tokens[1]), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"chiayunrong"},"content":" case \"bye\":","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"chiayunrong"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"chiayunrong"},"content":" case \"todo\":","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"chiayunrong"},"content":" return new ToDoCommand(getToDoName(userInput), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"chiayunrong"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"chiayunrong"},"content":" return new DeadlineCommand(getDeadlineName(userInput), getDeadlineEnd(userInput), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"chiayunrong"},"content":" case \"event\":","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"chiayunrong"},"content":" return new EventCommand(getEventName(userInput), getEventStart(userInput), getEventEnd(userInput),","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"chiayunrong"},"content":" taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"chiayunrong"},"content":" case \"find\":","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"chiayunrong"},"content":" return new FindCommand(getFindSearchString(userInput), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"chiayunrong"},"content":" default:","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"chiayunrong"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":144}},{"path":"src/test/java/com/alpha/commands/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.DateTimeParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public void testExecute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" String taskName \u003d \"read book\";","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" String deadlineEnd \u003d \"2023-07-22 23:44\";","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" LocalDateTime parsedDeadlineEnd \u003d DateTimeParser.parseDateTimeString(deadlineEnd);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" DeadlineCommand command \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" command \u003d new DeadlineCommand(taskName, parsedDeadlineEnd, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" } catch (DuplicateTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" String expectedResult \u003d","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" + \"[D][ ] %s (by: %s)\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have 1 tasks in the list.\\n\",","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" taskName,","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" DateTimeParser.parseDateTimeObjectToDisplay(parsedDeadlineEnd));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" String result \u003d command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" assertEquals(expectedResult, result);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":38}},{"path":"src/test/java/com/alpha/commands/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"class UnmarkCommandTest {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" void testExecute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" String taskName \u003d \"read book\";","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" ToDoCommand toDoCommand \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" toDoCommand \u003d new ToDoCommand(taskName, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" } catch (DuplicateTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" toDoCommand.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" MarkCommand markCommand \u003d new MarkCommand(1, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" markCommand.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" UnmarkCommand unmarkCommand \u003d new UnmarkCommand(1, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" String expectedResult \u003d String.format(\"Nice! I\u0027ve marked this task as done:\\n [T][ ] %s\", taskName);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" String result \u003d unmarkCommand.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" assertEquals(expectedResult, result);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":33}}] +[{"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":"chiayunrong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"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":"chiayunrong"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" mainClass.set(\"Launcher\")","lastModifiedDate":"2023-09-18"},{"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":"chiayunrong"},"content":" archiveBaseName \u003d \"Alpha\"","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" archiveClassifier.set(\u0027\u0027)","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" archiveVersion.set(\u0027\u0027)","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"chiayunrong":20,"-":38}},{"path":"data/save.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"1","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"todo asdf","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"0","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"Alpha is a text-based to do list chat bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"* [Features](#features)","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" * [Adding to do task](#adding-to-do-task-todo)","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" * [Adding deadline task](#adding-deadline-task-deadline)","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * [Adding event task](#adding-event-task-event)","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * [Listing all tasks](#listing-all-tasks-list)","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * [Deleting task](#deleting-task-delete)","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" * [Marking task](#marking-task-mark)","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * [Unmarking task](#unmarking-task-unmark)","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * [Finding task](#finding-task-find)","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * [Exiting the program](#exiting-the-program-bye)","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * [Saving the data](#saving-the-data)","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"### Adding to do task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"Add to do task into the list of tasks. Name of the task must be unique.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"Format: `todo [task name]`","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":"* `todo read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":"* `todo study for midterms`","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"### Adding deadline task: `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"Add deadline task to list of tasks. Name of the task must be unique.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"Format: `deadline [task name] /by [yyyy-MM-dd HH:mm]`","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"* `deadline read book /by 2023-10-10 23:59`","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"* `deadline study for midterms /by 2023-11-06 08:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":"### Adding event task: `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"Add event task to list of tasks. Name of the task must be unique.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":"Format: `event [task name] /from [yyyy-MM-dd HH:mm] /to [yyyy-MM-dd HH:mm]`","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":"* `event read book /from 2023-10-10 20:00 /to 2023-10-11 00:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":"* `event midterms /from 2023-06-03 13:00 /to 2023-06-03 14:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":"Shows the list of all tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":"### Deleting task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":"Deletes the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":"Format: `delete [index of task]`","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":"* `delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":"* `delete 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"### Marking task: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":"Checks the specified task as completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":"Format: `mark [index of task]`","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":"* `mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"* `mark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":"### Unmarking task: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":"Checks the specified task as uncompleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":"Format: `unmark [index of task]`","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":"* `unmark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"* `unmark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":"### Finding task: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":"Shows the specific task with task name that contains the given input.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":"Format `find [search string]`","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":"* `find read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":"* `find midterms`","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":"### Exiting the program: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":"Saves task list into local storage and exits the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":"Format `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":"### Saving the data","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":"Tasks will only be saved upon exiting through the `bye` command.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":"## FAQ","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":"**Q**: How do I transfer my data to another Computer?","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":98,"author":{"gitId":"chiayunrong"},"content":"**A**: Install the app in the other computer and transfer the save file over. ","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"chiayunrong"},"content":"The save file should be located under data/save.txt","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"chiayunrong":73,"-":26}},{"path":"src/main/java/Alpha.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.ui.DialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * The Alpha class.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"public class Alpha extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" private final Image userPicture \u003d new Image(this.getClass().getResourceAsStream(\"redbloon.jpg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" private final Image alphaPicture \u003d new Image(this.getClass().getResourceAsStream(\"bluebloon.jpg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" private Processor processor;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" private Stage stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" initializeObjects(stage);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" configureStage();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" configureScrollPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" configureDialogContainer();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" configureAnchorPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" configureSendButton();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" configureUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" welcome();","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" private void initializeObjects(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" processor \u003d new Processor(\"./data/save.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" private void configureStage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" Scene scene \u003d new Scene(mainLayout); // Setting the scene to be our Label","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" stage.setScene(scene); // Setting the stage to show our screen","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" stage.setTitle(\"Alpha\");","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" private void configureScrollPane() {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":" private void configureDialogContainer() {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":" private void configureAnchorPane() {","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"chiayunrong"},"content":" private void configureSendButton() {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"chiayunrong"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":" handleUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"chiayunrong"},"content":" private void configureUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"chiayunrong"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"chiayunrong"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"chiayunrong"},"content":" handleUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"chiayunrong"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"chiayunrong"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"chiayunrong"},"content":" String alphaResponse \u003d processor.processInput(userInput.getText());","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"chiayunrong"},"content":" if (alphaResponse.equals(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"chiayunrong"},"content":" goodbye();","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"chiayunrong"},"content":" saveTaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"chiayunrong"},"content":" exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"chiayunrong"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"chiayunrong"},"content":" updateUi(userInput.getText(), alphaResponse);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"chiayunrong"},"content":" private void welcome() {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"chiayunrong"},"content":" Label welcomeText \u003d new Label(\"Hello! I\u0027m Alpha.\\n\" + \"What can I do for you?\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.getChildren().add(DialogBox.getAlphaDialog(welcomeText, new ImageView(alphaPicture)));","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"chiayunrong"},"content":" private void goodbye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"chiayunrong"},"content":" Label goodbyeText \u003d new Label(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.getChildren().add(DialogBox.getAlphaDialog(goodbyeText, new ImageView(alphaPicture)));","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"chiayunrong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"chiayunrong"},"content":" private void saveTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"chiayunrong"},"content":" processor.saveTaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"chiayunrong"},"content":" private void exit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"chiayunrong"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(1));","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"chiayunrong"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"chiayunrong"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"chiayunrong"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"chiayunrong"},"content":" pause.play();","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"chiayunrong"},"content":" private void updateUi(String userText, String alphaText) {","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"chiayunrong"},"content":" Label user \u003d new Label(userText);","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"chiayunrong"},"content":" Label alpha \u003d new Label(alphaText);","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"chiayunrong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"chiayunrong"},"content":" DialogBox.getUserDialog(user, new ImageView(userPicture)),","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"chiayunrong"},"content":" DialogBox.getAlphaDialog(alpha, new ImageView(alphaPicture))","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"chiayunrong"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"chiayunrong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":150,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":151,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":151}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The Launcher class.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" Application.launch(Alpha.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":14}},{"path":"src/main/java/Processor.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.TaskParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * The Processor class used to process user inputs/commands.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class Processor {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Processor.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param filePath The file path to the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" public Processor(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" taskList \u003d new TaskList(storage.load().getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" } catch (IOException | InvalidTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" * Process and execute user commands.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" * @return The output of executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" public String processInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" Command command \u003d TaskParser.parse(input, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" return command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" } catch (InvalidTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" * Saves task list to local storage file.","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" public void saveTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" storage.save(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":58}},{"path":"src/main/java/com/alpha/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Bye command.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Bye command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" public ByeCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" super(null);","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" return \"bye\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":19}},{"path":"src/main/java/com/alpha/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" * The type Command.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Command.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" public Command(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * Gets task list size.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" public int getTaskListSize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return taskList.getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" * Gets task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" * @return the task list","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" return taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * Execute the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @return the string","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":45}},{"path":"src/main/java/com/alpha/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * The type Deadline command.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private final Task task;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Deadline command.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" public DeadlineCommand(String name, LocalDateTime end, TaskList taskList) throws DuplicateTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" for (Task currentTasks : taskList.getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" if (currentTasks.getName().equals(name)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" task \u003d new Deadline(name, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" getTaskList().addTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":41}},{"path":"src/main/java/com/alpha/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Delete command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Delete command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public DeleteCommand(int index, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d super.getTaskList().deleteTask(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":30}},{"path":"src/main/java/com/alpha/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * The type Event command.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private final Task task;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Event command.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param start The start datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public EventCommand(String name, LocalDateTime start, LocalDateTime end, TaskList taskList)","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" throws DuplicateTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" for (Task currentTasks : taskList.getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" if (currentTasks.getName().equals(name)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" this.task \u003d new Event(name, start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" getTaskList().addTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":42}},{"path":"src/main/java/com/alpha/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Find command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final String searchString;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Find command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param searchString The search string.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public FindCommand(String searchString, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.searchString \u003d searchString;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" for (Task task : getTaskList().getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" if (task.getName().contains(searchString)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" String row \u003d count++ + \".\" + task + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" sb.append(row);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" return sb.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"chiayunrong":39}},{"path":"src/main/java/com/alpha/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid command.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid command.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" super(null);","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" return \"Please enter a valid command.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":19}},{"path":"src/main/java/com/alpha/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type List command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new List command.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" for (Task task : getTaskList().getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" String row \u003d count++ + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" sb.append(row);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" return sb.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":31}},{"path":"src/main/java/com/alpha/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Mark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Mark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public MarkCommand(int index, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d super.getTaskList().markTask(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":29}},{"path":"src/main/java/com/alpha/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The type To do command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final Task task;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new To do command.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public ToDoCommand(String name, TaskList taskList) throws DuplicateTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" for (Task currentTasks : taskList.getTasks()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" if (currentTasks.getName().equals(name)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" task \u003d new ToDo(name);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" getTaskList().addTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have \" + super.getTaskListSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":37}},{"path":"src/main/java/com/alpha/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The type Unmark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Unmark command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public UnmarkCommand(int index, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" super(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d super.getTaskList().unmarkTask(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":29}},{"path":"src/main/java/com/alpha/enums/MarkEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.enums;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The enum Mark enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public enum MarkEnum {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Done mark enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" DONE(\"X\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * Notdone mark enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" NOTDONE(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" private final String mark;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" MarkEnum(String mark) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" this.mark \u003d mark;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" return this.mark;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"chiayunrong":27}},{"path":"src/main/java/com/alpha/enums/TagEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.enums;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The enum Tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public enum TagEnum {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * Todo tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" TODO(\"T\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * Deadline tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" DEADLINE(\"D\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Event tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" EVENT(\"E\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * Empty tag enum.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" EMPTY(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" private final String tag;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" TagEnum(String tag) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" return this.tag;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"chiayunrong":34}},{"path":"src/main/java/com/alpha/exceptions/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.exceptions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" * @param message the message","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" public InvalidDateTimeException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" super(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid date time format exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidDateTimeFormatException extends InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid date time format exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" public InvalidDateTimeFormatException() {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" super(\"Please ensure date time is in the following format: yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":27}},{"path":"src/main/java/com/alpha/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid task exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid task exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid to do exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidToDoException extends InvalidTaskException {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid to do exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" public InvalidToDoException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" super(message","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" + \"Please ensure that the format is as follows:\\n \"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" + \"todo \u003ctask name\u003e\");","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid deadline exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidDeadlineException extends InvalidTaskException {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid deadline exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public InvalidDeadlineException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" super(message","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" + \"Please ensure that the format is as follows:\\n \"","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" + \"deadline \u003ctask name\u003e /by \u003cyyyy-MM-dd HH:mm\u003e\");","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" * The type Invalid event exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" public static class InvalidEventException extends InvalidTaskException {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Invalid event exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" * @param message The exception message.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" public InvalidEventException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" super(message","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" + \"Please ensure that the format is as follows:\\n \"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" + \"event \u003ctask name\u003e /from \u003cyyyy-MM-dd HH:mm\u003e /to \u003cyyyy-MM-dd HH:mm\u003e\");","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" * The type Duplicate task exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" public static class DuplicateTaskException extends InvalidTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" public DuplicateTaskException() {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" super(\"Task is already in the list.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":76}},{"path":"src/main/java/com/alpha/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.MarkEnum;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.TaskParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * The Storage class.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" private final File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" * @param filePath File path to the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" * @throws IOException If an io exception occurs.","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" public Storage(String filePath) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" * Loads task list from the local storage file.","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" * @return The task list from the storage file.","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * @throws FileNotFoundException If the storage file cannot be found.","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidTaskException If the task in the storage file is invalid.","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidDateTimeException If the date in the storage file is invalid.","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public TaskList load() throws FileNotFoundException, InvalidTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" Command command \u003d TaskParser.parse(sc.nextLine(), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" * Saves current task list into the local storage file.","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The current task list.","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" * @throws IOException If an io exception occurs.","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" public void save(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" StringBuilder row \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" row.append(task.toStorageString());","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" if (task.getMark() \u003d\u003d MarkEnum.DONE) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" row.append(\"\\nmark \");","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" row.append(count);","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" row.append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" fw.write(row.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" ++count;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":76}},{"path":"src/main/java/com/alpha/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.DateTimeParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The Deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public Deadline(String name, LocalDateTime end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" super(name);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" this.setTag(TagEnum.DEADLINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" public String toStorageString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" return \"deadline \"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" + getName()","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" + \" /by \"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToStore(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" return super.toString()","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" + \" (by: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToDisplay(end)","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":42}},{"path":"src/main/java/com/alpha/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.DateTimeParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The Event task..","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" * @param start The start datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param end The end datetime as a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" public Event(String name, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" super(name);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" this.setTag(TagEnum.EVENT);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" public String toStorageString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" return \"event \"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" + getName()","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" + \" /from \"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToStore(start)","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" + \" /to \"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToStore(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" return super.toString()","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" + \"(from: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToDisplay(start)","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" + \" to: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" + DateTimeParser.parseDateTimeObjectToDisplay(end)","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":50}},{"path":"src/main/java/com/alpha/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.MarkEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" * The type Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" private final String name;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private TagEnum tag;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" private MarkEnum mark;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" * @param name the name","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" this.tag \u003d TagEnum.EMPTY;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" this.mark \u003d MarkEnum.NOTDONE;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" * Returns the task as a string to be stored in the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" public abstract String toStorageString();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" * Sets the tag of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" * @param tag The tag of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" public void setTag(TagEnum tag) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" * Gets the mark of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" * @return The mark of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" public MarkEnum getMark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" return mark;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" * Sets the mark of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" * @param mark The mark of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" public void setMark(MarkEnum mark) {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" this.mark \u003d mark;","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" * @return The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" public String getName() {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" return name;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" private String wrap(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" return \"[\" + text + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":" return wrap(this.tag.toString()) + wrap(this.mark.toString()) + \" \" + this.name;","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":78}},{"path":"src/main/java/com/alpha/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.MarkEnum;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":" * The Task list class.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Task list with a given list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" * Add task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" * Gets size of the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" * Mark task as done.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" * @return The marked task.","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" public Task markTask(int taskNumber) {","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":" task.setMark(MarkEnum.DONE);","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" * Mark task as undone.","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" * @return The unmarked task.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":" public Task unmarkTask(int taskNumber) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"chiayunrong"},"content":" task.setMark(MarkEnum.NOTDONE);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":" * Delete task from task list..","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":" public Task deleteTask(int taskNumber) {","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"chiayunrong"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d getSize();","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":" tasks.remove(task);","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"chiayunrong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":96}},{"path":"src/main/java/com/alpha/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.enums.TagEnum;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":" * The type To do.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new To do.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" super(name);","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" this.setTag(TagEnum.TODO);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" public String toStorageString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" return \"todo \" + getName();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"chiayunrong":24}},{"path":"src/main/java/com/alpha/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" * The Dialog box class.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" private final Label text;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" private final ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" * Instantiates a new Dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" * @param l The label.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" * @param iv The image view.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" text \u003d l;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" * Gets user dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" * @param l The label.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" * @param iv The image view.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" * @return The user dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" * Gets alpha dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" * @param l The label.","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" * @param iv The image view.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":" * @return The alpha dialog box.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" public static DialogBox getAlphaDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"chiayunrong":67}},{"path":"src/main/java/com/alpha/utils/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.utils;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":" * The Date time parser utility class.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"public class DateTimeParser {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":" private DateTimeParser() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" * Parse date time string from yyyy-MM-dd HH:mm into a LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" * @param text The text to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" * @return The LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" public static LocalDateTime parseDateTimeString(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" return LocalDateTime.parse(text, formatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" * Parse LocalDateTime object into a string to be displayed.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" * @param localDateTime The LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" * @return The parsed string.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" public static String parseDateTimeObjectToDisplay(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" return localDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" * Parse LocalDateTime object into a string to be stored into the local storage file.","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" * @param localDateTime The LocalDateTime object.","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" * @return The parsed string.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" public static String parseDateTimeObjectToStore(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" return localDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":44}},{"path":"src/main/java/com/alpha/utils/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.utils;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.ByeCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.Command;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.DeadlineCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.DeleteCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.EventCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.FindCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.InvalidCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.ListCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.MarkCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.ToDoCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.commands.UnmarkCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidDateTimeException.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.InvalidDeadlineException;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.InvalidEventException;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.InvalidToDoException;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" * The Task parser utility class.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"public class TaskParser {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" private TaskParser() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":" private static String getFindSearchString(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" return text.replaceFirst(\"find\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" private static String getToDoName(String text) throws InvalidToDoException {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"todo\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"chiayunrong"},"content":" if (result.isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidToDoException(\"Unable to find todo name.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"chiayunrong"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"chiayunrong"},"content":" private static String getDeadlineName(String text) throws InvalidDeadlineException {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"deadline\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastBy \u003d result.lastIndexOf(\"/by \");","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastBy \u003d\u003d -1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDeadlineException(\"Unable to find deadline name.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"chiayunrong"},"content":" return result.substring(0, indexOfLastBy - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"chiayunrong"},"content":" private static LocalDateTime getDeadlineEnd(String text)","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"chiayunrong"},"content":" throws InvalidDeadlineException, InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"deadline\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastBy \u003d result.lastIndexOf(\"/by \");","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastBy \u003d\u003d -1 || indexOfLastBy + 4 \u003e\u003d result.length()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDeadlineException(\"Unable to find deadline end date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"chiayunrong"},"content":" return DateTimeParser.parseDateTimeString(result.substring(indexOfLastBy + 4));","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"chiayunrong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"chiayunrong"},"content":" private static String getEventName(String text) throws InvalidEventException {","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"event\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastFrom \u003d result.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastFrom \u003d\u003d -1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidEventException(\"Unable to find event name.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"chiayunrong"},"content":" return result.substring(0, indexOfLastFrom);","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"chiayunrong"},"content":" private static LocalDateTime getEventStart(String text)","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"chiayunrong"},"content":" throws InvalidEventException, InvalidDateTimeFormatException {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"event\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastFrom \u003d result.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastTo \u003d result.lastIndexOf(\"/to\");","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastFrom \u003d\u003d -1 || indexOfLastTo \u003d\u003d -1 || indexOfLastFrom + 6 \u003e\u003d indexOfLastTo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidEventException(\"Unable to find event start date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"chiayunrong"},"content":" return DateTimeParser.parseDateTimeString(result.substring(indexOfLastFrom + 6, indexOfLastTo - 1));","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"chiayunrong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"chiayunrong"},"content":" private static LocalDateTime getEventEnd(String text)","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"chiayunrong"},"content":" throws InvalidEventException, InvalidDateTimeFormatException {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"chiayunrong"},"content":" String result \u003d text.replaceFirst(\"event\", \"\").replaceFirst(\" \", \"\");","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"chiayunrong"},"content":" int indexOfLastTo \u003d result.lastIndexOf(\"/to \");","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"chiayunrong"},"content":" if (indexOfLastTo \u003d\u003d -1 || indexOfLastTo + 4 \u003e\u003d result.length()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidEventException(\"Unable to find event end date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"chiayunrong"},"content":" return DateTimeParser.parseDateTimeString(result.substring(indexOfLastTo + 4));","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"chiayunrong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"chiayunrong"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"chiayunrong"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"chiayunrong"},"content":" * Parse command from the user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"chiayunrong"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"chiayunrong"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"chiayunrong"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"chiayunrong"},"content":" * @return The command.","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidTaskException The invalid task exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"chiayunrong"},"content":" * @throws InvalidDateTimeException The invalid date time exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"chiayunrong"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"chiayunrong"},"content":" public static Command parse(String userInput, TaskList taskList)","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"chiayunrong"},"content":" throws InvalidTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"chiayunrong"},"content":" String[] tokens \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"chiayunrong"},"content":" switch (tokens[0]) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"chiayunrong"},"content":" case \"list\":","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"chiayunrong"},"content":" return new ListCommand(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"chiayunrong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"chiayunrong"},"content":" return new MarkCommand(Integer.parseInt(tokens[1]), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"chiayunrong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"chiayunrong"},"content":" return new UnmarkCommand(Integer.parseInt(tokens[1]), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"chiayunrong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"chiayunrong"},"content":" return new DeleteCommand(Integer.parseInt(tokens[1]), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"chiayunrong"},"content":" case \"bye\":","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"chiayunrong"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"chiayunrong"},"content":" case \"todo\":","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"chiayunrong"},"content":" return new ToDoCommand(getToDoName(userInput), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"chiayunrong"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"chiayunrong"},"content":" return new DeadlineCommand(getDeadlineName(userInput), getDeadlineEnd(userInput), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"chiayunrong"},"content":" case \"event\":","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"chiayunrong"},"content":" return new EventCommand(getEventName(userInput), getEventStart(userInput), getEventEnd(userInput),","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"chiayunrong"},"content":" taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"chiayunrong"},"content":" case \"find\":","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"chiayunrong"},"content":" return new FindCommand(getFindSearchString(userInput), taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"chiayunrong"},"content":" default:","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"chiayunrong"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":144}},{"path":"src/test/java/com/alpha/commands/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.utils.DateTimeParser;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" public void testExecute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" String taskName \u003d \"read book\";","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" String deadlineEnd \u003d \"2023-07-22 23:44\";","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" LocalDateTime parsedDeadlineEnd \u003d DateTimeParser.parseDateTimeString(deadlineEnd);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" DeadlineCommand command \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":" command \u003d new DeadlineCommand(taskName, parsedDeadlineEnd, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" } catch (DuplicateTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" String expectedResult \u003d","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":" String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" + \"[D][ ] %s (by: %s)\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":" + \"Now you have 1 tasks in the list.\\n\",","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" taskName,","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" DateTimeParser.parseDateTimeObjectToDisplay(parsedDeadlineEnd));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"chiayunrong"},"content":" String result \u003d command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"chiayunrong"},"content":" assertEquals(expectedResult, result);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"chiayunrong":38}},{"path":"src/test/java/com/alpha/commands/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"chiayunrong"},"content":"package com.alpha.commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"chiayunrong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"chiayunrong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.exceptions.InvalidTaskException.DuplicateTaskException;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"chiayunrong"},"content":"import com.alpha.tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"chiayunrong"},"content":"class UnmarkCommandTest {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"chiayunrong"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"chiayunrong"},"content":" void testExecute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"chiayunrong"},"content":" String taskName \u003d \"read book\";","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"chiayunrong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"chiayunrong"},"content":" ToDoCommand toDoCommand \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"chiayunrong"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"chiayunrong"},"content":" toDoCommand \u003d new ToDoCommand(taskName, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"chiayunrong"},"content":" } catch (DuplicateTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"chiayunrong"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"chiayunrong"},"content":" toDoCommand.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"chiayunrong"},"content":" MarkCommand markCommand \u003d new MarkCommand(1, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"chiayunrong"},"content":" markCommand.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"chiayunrong"},"content":" UnmarkCommand unmarkCommand \u003d new UnmarkCommand(1, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"chiayunrong"},"content":" String expectedResult \u003d String.format(\"Nice! I\u0027ve marked this task as done:\\n [T][ ] %s\", taskName);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"chiayunrong"},"content":" String result \u003d unmarkCommand.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"chiayunrong"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"chiayunrong"},"content":" assertEquals(expectedResult, result);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"chiayunrong"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"chiayunrong"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"chiayunrong":33}}] diff --git a/chiayunrong_ip_master/commits.json b/chiayunrong_ip_master/commits.json index f4573d1c..1769cfbd 100644 --- a/chiayunrong_ip_master/commits.json +++ b/chiayunrong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"chiayunrong":[{"date":"2023-08-21","commitResults":[{"hash":"de16bd9439abae0ef6705709f9ac798b9396e8ab","isMergeCommit":false,"messageTitle":"Rename chatbot and implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"3eea79e9fbfd0407c9124059ceb57d15fa0ddd4f","isMergeCommit":false,"messageTitle":"Implement echoing commands entered by user","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"6e7a4ac92d7ba434c614fd713fde37d6322a8ddc","isMergeCommit":false,"messageTitle":"Add ability to store and display text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":7}}},{"hash":"f7c618d5b4560f07deb1172566e08dd53599edbb","isMergeCommit":false,"messageTitle":"Add ability to mark tasks as done and undone","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":15}}}]},{"date":"2023-08-22","commitResults":[{"hash":"8cda2a6ed20632704a329b8475432b6028db4592","isMergeCommit":false,"messageTitle":"Add support for tracking todo, deadline and event","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":18}}},{"hash":"98d46444013728b8c42171046dc08dee284c7b37","isMergeCommit":false,"messageTitle":"Add regression tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"82d0009e64ec2c187fd61075a1f1070a77e80509","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":337,"deletions":35}}},{"hash":"9d541b868fd7902151a93c9da3b715716fcc8e23","isMergeCommit":false,"messageTitle":"Add support for deleting tasks","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":18,"deletions":0}}},{"hash":"c405c112ed8ca7a7e0e8714d83684d9d0eaeec07","isMergeCommit":false,"messageTitle":"Fix parser bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3828def543c8ac1b98341b3ffb7959374a98b037","isMergeCommit":false,"messageTitle":"Refactor tags and marks into enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":179}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b520940cd7ee7ec673c033833ec0e1a93a26d4fa","isMergeCommit":false,"messageTitle":"Add support for saving and loading tasks","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":1}}},{"hash":"52b83c8fa855ef51ce8049db70c1dca55bd235b9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"77d2d9f797e044518f13287bddb0a7646f193339","isMergeCommit":false,"messageTitle":"Add support for datetime objects","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":53,"deletions":19},"sh":{"insertions":6,"deletions":0}}},{"hash":"e522bbc214d4875b4303e7d474b458d1c327c976","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9acad004d07bfb48a51b734fb5ffa73419b3e7fa","isMergeCommit":false,"messageTitle":"Use more OOP throughout codebase","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":485,"deletions":188}}},{"hash":"abf63c630aa271baad1f4351fd0c1518e9682806","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e2fb46f20db37ce36a02603fed5a955e90e7451f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b19487d3e52a044015f4fe957ea51fc93dde3b10","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"44ddd22ce4f196a6b2b3ad54147b64f41769a4e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1c7f423e364597ad491d4693a66c4fa06a9c4ecc","isMergeCommit":false,"messageTitle":"Add minimal unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":9}}},{"hash":"539310ebd92b12834151a37bfdf1b116066732ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"471d375933a4e758ec8c54497cea41c16684cce5","isMergeCommit":false,"messageTitle":"Package app as JAR using gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"21b69bc5756831a9197cb0d31300604d480cf47e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"4ca840f45be995cef96078219399b38c305c586f","isMergeCommit":false,"messageTitle":"Add checkstyle to codebase","messageBody":"","tags":["A-CodingStandard","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":572,"deletions":561}}},{"hash":"4e7c84695519f36f832cb7caa2259f94567f81a1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"eca74401a3fbcdcd6eadddf88dffc0110f0b685b","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":529,"deletions":12}}},{"hash":"1e667abf3ab249612e85f550e9819de18950f0e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"45f1e54c771fd80508876cdde219f19e2d24017d","isMergeCommit":false,"messageTitle":"Support finding tasks using a search string","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":58,"deletions":0}}},{"hash":"72a636d69bd8d10c46feeaeab847f7c8fe56ee49","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"ec7d6450cc742a902e60440731883546e147b579","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":4,"deletions":18},"java":{"insertions":291,"deletions":186},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":44}}},{"hash":"d052e534c860420fbd95a5e95ea2c1d1ae5eb879","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"f1162602055b35ff6d4fe34ee156a08c28afe118","isMergeCommit":false,"messageTitle":"Refactor codebase","messageBody":"Improve javadocs across entire codebase.\n\nAvoid magic literals and unused variables to reduce confusion.\n\nMake code more obvious to readers.\n\nStructure code logically.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":642,"deletions":861}}},{"hash":"284207affec32b80a5cf65fb0e272d5333bf74f6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from chiayunrong/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"6a96830a4b2ef95ecbea73f2e4393edb213c1476","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"1455431584d509acf8ac66ffeac98ef79178b1a4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from chiayunrong/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"87fffaf9b840539400aef94b130d78691d7a4f19","isMergeCommit":false,"messageTitle":"Add support for detecting duplicate tasks","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":5}}},{"hash":"246478754076173165a9ccda0470ce855daa06d7","isMergeCommit":true,"messageTitle":"Merge pull request #4 from chiayunrong/branch-C-DetectDuplicates","messageBody":"Add support for detecting duplicate tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"dd512a33545d974efaf24f5614d4a912d0a5af02","isMergeCommit":false,"messageTitle":"Add user guide and screenshot","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":85,"deletions":15}}},{"hash":"5bd83a3fd230b7cf0306b2f558eae2d3e7a08e31","isMergeCommit":true,"messageTitle":"Merge pull request #6 from chiayunrong/branch-A-UserGuide","messageBody":"Add user guide and screenshot","tags":["A-Release"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"chiayunrong":{"java":1442,"md":73,"fxml":0,"sh":0,"bat":0,"gradle":9,"txt":4}},"authorContributionVariance":{"chiayunrong":199051.83},"authorDisplayNameMap":{"chiayunrong":"CS2103-W14-2 CHIA..RONG"}} +{"authorDailyContributionsMap":{"chiayunrong":[{"date":"2023-08-21","commitResults":[{"hash":"de16bd9439abae0ef6705709f9ac798b9396e8ab","isMergeCommit":false,"messageTitle":"Rename chatbot and implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"3eea79e9fbfd0407c9124059ceb57d15fa0ddd4f","isMergeCommit":false,"messageTitle":"Implement echoing commands entered by user","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"6e7a4ac92d7ba434c614fd713fde37d6322a8ddc","isMergeCommit":false,"messageTitle":"Add ability to store and display text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":7}}},{"hash":"f7c618d5b4560f07deb1172566e08dd53599edbb","isMergeCommit":false,"messageTitle":"Add ability to mark tasks as done and undone","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":15}}}]},{"date":"2023-08-22","commitResults":[{"hash":"8cda2a6ed20632704a329b8475432b6028db4592","isMergeCommit":false,"messageTitle":"Add support for tracking todo, deadline and event","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":18}}},{"hash":"98d46444013728b8c42171046dc08dee284c7b37","isMergeCommit":false,"messageTitle":"Add regression tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"82d0009e64ec2c187fd61075a1f1070a77e80509","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":337,"deletions":35}}},{"hash":"9d541b868fd7902151a93c9da3b715716fcc8e23","isMergeCommit":false,"messageTitle":"Add support for deleting tasks","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":18,"deletions":0}}},{"hash":"c405c112ed8ca7a7e0e8714d83684d9d0eaeec07","isMergeCommit":false,"messageTitle":"Fix parser bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3828def543c8ac1b98341b3ffb7959374a98b037","isMergeCommit":false,"messageTitle":"Refactor tags and marks into enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":179}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b520940cd7ee7ec673c033833ec0e1a93a26d4fa","isMergeCommit":false,"messageTitle":"Add support for saving and loading tasks","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":1}}},{"hash":"52b83c8fa855ef51ce8049db70c1dca55bd235b9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"77d2d9f797e044518f13287bddb0a7646f193339","isMergeCommit":false,"messageTitle":"Add support for datetime objects","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":53,"deletions":19},"sh":{"insertions":6,"deletions":0}}},{"hash":"e522bbc214d4875b4303e7d474b458d1c327c976","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9acad004d07bfb48a51b734fb5ffa73419b3e7fa","isMergeCommit":false,"messageTitle":"Use more OOP throughout codebase","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":485,"deletions":188}}},{"hash":"abf63c630aa271baad1f4351fd0c1518e9682806","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e2fb46f20db37ce36a02603fed5a955e90e7451f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b19487d3e52a044015f4fe957ea51fc93dde3b10","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"44ddd22ce4f196a6b2b3ad54147b64f41769a4e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1c7f423e364597ad491d4693a66c4fa06a9c4ecc","isMergeCommit":false,"messageTitle":"Add minimal unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":9}}},{"hash":"539310ebd92b12834151a37bfdf1b116066732ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"471d375933a4e758ec8c54497cea41c16684cce5","isMergeCommit":false,"messageTitle":"Package app as JAR using gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"21b69bc5756831a9197cb0d31300604d480cf47e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"4ca840f45be995cef96078219399b38c305c586f","isMergeCommit":false,"messageTitle":"Add checkstyle to codebase","messageBody":"","tags":["A-CodingStandard","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":572,"deletions":561}}},{"hash":"4e7c84695519f36f832cb7caa2259f94567f81a1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"eca74401a3fbcdcd6eadddf88dffc0110f0b685b","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":529,"deletions":12}}},{"hash":"1e667abf3ab249612e85f550e9819de18950f0e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"45f1e54c771fd80508876cdde219f19e2d24017d","isMergeCommit":false,"messageTitle":"Support finding tasks using a search string","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":58,"deletions":0}}},{"hash":"72a636d69bd8d10c46feeaeab847f7c8fe56ee49","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"ec7d6450cc742a902e60440731883546e147b579","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":4,"deletions":18},"java":{"insertions":291,"deletions":186},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":44}}},{"hash":"d052e534c860420fbd95a5e95ea2c1d1ae5eb879","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"f1162602055b35ff6d4fe34ee156a08c28afe118","isMergeCommit":false,"messageTitle":"Refactor codebase","messageBody":"Improve javadocs across entire codebase.\n\nAvoid magic literals and unused variables to reduce confusion.\n\nMake code more obvious to readers.\n\nStructure code logically.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":642,"deletions":861}}},{"hash":"284207affec32b80a5cf65fb0e272d5333bf74f6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from chiayunrong/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"6a96830a4b2ef95ecbea73f2e4393edb213c1476","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"1455431584d509acf8ac66ffeac98ef79178b1a4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from chiayunrong/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"87fffaf9b840539400aef94b130d78691d7a4f19","isMergeCommit":false,"messageTitle":"Add support for detecting duplicate tasks","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":5}}},{"hash":"246478754076173165a9ccda0470ce855daa06d7","isMergeCommit":true,"messageTitle":"Merge pull request #4 from chiayunrong/branch-C-DetectDuplicates","messageBody":"Add support for detecting duplicate tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"dd512a33545d974efaf24f5614d4a912d0a5af02","isMergeCommit":false,"messageTitle":"Add user guide and screenshot","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":85,"deletions":15}}},{"hash":"5bd83a3fd230b7cf0306b2f558eae2d3e7a08e31","isMergeCommit":true,"messageTitle":"Merge pull request #6 from chiayunrong/branch-A-UserGuide","messageBody":"Add user guide and screenshot","fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"e35d8c557517e8809b5290dcce04d00aa3fd986b","isMergeCommit":false,"messageTitle":"Minor fixes to build.gradle and javadocs","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":10},"java":{"insertions":11,"deletions":13}}}]}]},"authorFileTypeContributionMap":{"chiayunrong":{"java":1440,"md":73,"fxml":0,"sh":0,"bat":0,"gradle":20,"txt":4}},"authorContributionVariance":{"chiayunrong":188354.39},"authorDisplayNameMap":{"chiayunrong":"CS2103-W14-2 CHIA..RONG"}} diff --git a/ji-just-ji_ip_master/authorship.json b/ji-just-ji_ip_master/authorship.json index 061c760d..92f6cb35 100644 --- a/ji-just-ji_ip_master/authorship.json +++ b/ji-just-ji_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"# Peko project","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003e Nanimitendayo Pettanko","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"Konpeko Konpeko Konpeko! Hololive sankisei Usada Pekora~peko.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"## What\u0027s This?","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"Let Pekora handle keeping track all your tasks!","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"* Text-Based","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"* Super simple","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"* Easy to use","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"* Peko!","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"## You want your own PekoBot?","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"1. Download your [PEKOBOT]()","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"1. Double click to run","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"1. Add your tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"1. ~~Unleash War Crimes Peko!!!~~","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"No need to pay for youtube membership!","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"Features","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"* [X] Manage Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"* [X] Manage Deadlines","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"* [X] Manage Events","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"* [ ] Reminders (Peko alarm not working yet)","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ji-just-ji":28}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"plugins {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"group \u0027org.example\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"version \u00271.0-SNAPSHOT\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"repositories {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" mavenCentral()","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.7.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:1.7.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ji-just-ji":36}},{"path":"src/main/Archive.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | ye","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | no","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"D | 1 | 5 | 22/2/2023 1920","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"D | 1 | bre | 20/2/2023 1000","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | 6","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":5}},{"path":"src/main/Copypasta.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"So as a joke, I went to my friend\u0027s house wearing Pekora\u0027s","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"wig and clothes. I could barely stop my laughter as he went as red as a tomato","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"and looked at me from head to toe with a bit of drool in his mouth.","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"Nanimitendayo?! Kono Hentai!","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ji-just-ji":4}},{"path":"src/main/List.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | 1","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"D | 1 | 2 | 22/2/23 1000","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | 4","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"ji-just-ji":3}},{"path":"src/main/Usagi.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":" _ _","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"| \\ / |","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\\ \\ / /","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" \\ \\ / /","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" \\ \\_________/ /","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" / \\ / \\","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" / / \\ \\","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"| _____ |","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" \\ \\___/ /","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" \\_________________/","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ji-just-ji":14}},{"path":"src/main/java/GUI/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.lang.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.util.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"ji-just-ji":19}},{"path":"src/main/java/GUI/GUI.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.shape.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.text.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"\u003cBorderPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"400.0\" prefWidth\u003d\"600.0\" xmlns\u003d\"http://javafx.com/javafx/11.0.14-internal\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" \u003ctop\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"60.0\" prefWidth\u003d\"600.0\" styleClass\u003d\"gray-background\" stylesheets\u003d\"@../Values/style.css\" BorderPane.alignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" \u003cStackPane alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"60.0\" prefWidth\u003d\"162.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" \u003cCircle fill\u003d\"DODGERBLUE\" radius\u003d\"32.0\" stroke\u003d\"LIME\" strokeType\u003d\"INSIDE\" strokeWidth\u003d\"3.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \u003cImageView fitHeight\u003d\"64.0\" fitWidth\u003d\"66.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e\u003c/StackPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox alignment\u003d\"CENTER\" prefHeight\u003d\"71.0\" prefWidth\u003d\"629.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" \u003cText fill\u003d\"#7ec2fe\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"兎田ぺこら\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" \u003cFont name\u003d\"Bauhaus 93\" size\u003d\"48.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" \u003c/top\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"\u003c/BorderPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":30}},{"path":"src/main/java/GUI/HeaderCircle.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.lang.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.util.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"\u003cAnchorPane xmlns\u003d\"http://javafx.com/javafx\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml\"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" fx:controller\u003d\"GUI.HeaderCircle\"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" prefHeight\u003d\"400.0\" prefWidth\u003d\"600.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":15}},{"path":"src/main/java/GUI/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"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\"peko.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"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-07"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"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-07"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" styleClass\u003d\"white-background\" stylesheets\u003d\"@../Values/style.css\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" styleClass\u003d\"white-background\" stylesheets\u003d\"@../Values/style.css\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox prefHeight\u003d\"78.0\" prefWidth\u003d\"400.0\" styleClass\u003d\"gray-background\" stylesheets\u003d\"@../Values/style.css\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" \u003cStackPane alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"60.0\" prefWidth\u003d\"162.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" \u003cCircle fill\u003d\"DODGERBLUE\" radius\u003d\"32.0\" stroke\u003d\"LIME\" strokeType\u003d\"INSIDE\" strokeWidth\u003d\"3.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" \u003cImageView fitHeight\u003d\"66.0\" fitWidth\u003d\"67.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" \u003cImage url\u003d\"@../../resources/Pics/tumblr_67c47d22da73ac2ba89e1e97bce6e525_76dfa232_400.png\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox alignment\u003d\"CENTER\" prefHeight\u003d\"71.0\" prefWidth\u003d\"629.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" \u003cText fill\u003d\"#7ec2fe\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"兎田ぺこら\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" \u003cFont name\u003d\"Bauhaus 93\" size\u003d\"48.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"ji-just-ji":49}},{"path":"src/main/java/module-info.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"module ip.main {","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":" requires javafx.graphics;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":" requires javafx.controls;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" requires javafx.fxml;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" requires org.junit.jupiter.api;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" opens peko;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" opens peko.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" opens peko.exceptions;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" opens peko.memory;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" opens peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":11}},{"path":"src/main/java/peko/DateTimeHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"public class DateTimeHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" private String dateTimeString;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private int year;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private int month;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" private int day;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" private int hour;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" private int min;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a DateTimeHandler object from a string representation of date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * This constructor takes a string containing date and time information, parses it,","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * and initializes the DateTimeHandler object with the parsed values.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * @param s The string representation of date and time in the format \"dd/mm/yyyy HHmm\".","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" public DateTimeHandler(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" String[] dateTime \u003d s.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" String[] dateString \u003d dateTime[0].split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" int timeString \u003d Integer.parseInt(dateTime[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" day \u003d Integer.parseInt(dateString[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" month \u003d Integer.parseInt(dateString[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" year \u003d Integer.parseInt(dateString[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" hour \u003d timeString/100;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" min \u003d timeString%100;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" date \u003d LocalDateTime.of(year,month,day,hour,min);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" dateTimeString \u003d date.getMonth() + \" \" + date.getDayOfMonth() + \" \" + date.getYear();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" dateTimeString \u003d date.format(format);","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * Generates a formatted string representation of date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" * This method creates and returns a string containing the date, time, and padded minutes.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representation of date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" public String stringDisplay() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" return dateTimeString;","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" //return dateTimeString + \" \" + hour + \":\" + ((min \u003c 10) ? \"0\" + min : min);","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" * Returns a string representation of the date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" * This method generates and returns a string containing the formatted date and time,","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" * with day, month, year, hour, and optional padded minutes.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" return day + \"/\" + month + \"/\" + year + \" \" + hour + ((min \u003c 10) ? \"0\" + min : min);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof DateTimeHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" return date.equals(((DateTimeHandler) o).date);","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ji-just-ji":73}},{"path":"src/main/java/peko/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * The `DialogBox` class is used to create custom dialog boxes for a chat interface.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * It extends `HBox` and consists of a label for text and an image view for a display picture (e.g., user\u0027s avatar).","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private Label text;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * Creates a new `DialogBox` with the specified label and image view.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * @param l The label containing the text to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" * @param iv The image view containing the display picture to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" text \u003d l;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" * Flips the alignment of the dialog box to create Peko\u0027s dialog box (aligned to the top left).","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" * Creates and returns a user\u0027s dialog box with the specified label and image view.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" * @param l The label containing the text to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" * @param iv The image view containing the display picture to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" * @return A user\u0027s dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" * Creates and returns Peko\u0027s dialog box (flipped for alignment) with the specified label and image view.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * @param l The label containing the text to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" * @param iv The image view containing the display picture to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" * @return Peko\u0027s dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" public static DialogBox getPekoDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"ji-just-ji":72}},{"path":"src/main/java/peko/GUIController.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.Initializable;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":"import java.net.URL;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":"import java.util.ResourceBundle;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" * The `GUIController` class manages the graphical user interface (GUI) for the chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" * It handles user input, displays chat messages, and manages the layout of UI elements.","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"public class GUIController extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" private Scene scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" private Image pekoIcon \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_67c47d22da73ac2ba89e1e97bce6e525_76dfa232_400.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" private Image userIcon \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_cd531dc8ea0423c248426f9f8cf65f72_1a341469_1280.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" * The main entry point for the JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" stage.setTitle(\"Peko\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a label for a chat message and configures its properties.","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" * @param text The text content of the label (chat message).","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" * @return A configured label for displaying a chat message.","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" return textToAdd;","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" * Handles user input when the \"Send\" button is clicked or the Enter key is pressed.","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":141}},{"path":"src/main/java/peko/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The `Launcher` class is responsible for launching the Peko JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It includes the main method, which serves as the entry point for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * The main method that launches the Peko JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * @param args The command-line arguments passed to the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" Application.launch(Peko.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ji-just-ji":20}},{"path":"src/main/java/peko/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" * The `Main` class serves as the main entry point for the Peko JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * It extends the JavaFX `Application` class and sets up the application\u0027s user interface.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" private Peko peko \u003d new Peko();","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * The main entry point for the JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setPeko(peko);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"ji-just-ji":36}},{"path":"src/main/java/peko/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * The `MainWindow` class controls the main user interface of the Peko chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * It manages the layout and interactions of UI components such as the scroll pane, dialog container,","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * user input field, and send button.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"public class MainWindow {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" private Peko peko;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" private Image pekoImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Dapeko.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * Initializes the main window by binding the scroll pane\u0027s vertical value to the dialog container\u0027s height.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" * Sets the Peko instance for this main window.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @param p The Peko instance to associate with this main window.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public void setPeko(Peko p) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" peko \u003d p;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"ji-just-ji":50}},{"path":"src/main/java/peko/Output.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":" * The `Output` class provides static methods to handle console output and display messages,","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" * including an introduction message and an exit message for the Peko chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"public class Output {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" private static final String lineBreak \u003d \"------------------------------------------\"; //42","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" private static final String introText \u003d \"Konpeko, Konpeko, Konpeko! \\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" + \"Hololive san kisei no\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" + \"Usada Pekora-peko! almondo almondo!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private static final String exitText \u003d \"Otsupeko! Bye bye!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Displays the introduction message, including a Peko-themed logo and a greeting.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" public static void intro() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" String pekoLogo \u003d \" _____ _\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" + \"| |___ | | ______\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" + \"| ___/ _ \\\\| |/ / \\\\\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" + \"| | \u003c __/| \u003c \u003c\u003e |\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" + \"|_| \\\\___||_|\\\\_\\\\____/\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(pekoLogo);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(introText);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" * Displays the exit message when the Peko chat application is exiting.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" public static void exit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(exitText);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":36}},{"path":"src/main/java/peko/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The `Parser` class is responsible for parsing user input and determining the appropriate","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * command and description for the Peko chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private String string;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private static final String[] commands \u003d new String[]","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" {\"echo\",\"otsupeko\", \"list\", \"write\", \"mark\", \"unmark\",","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \"todo\", \"deadline\", \"event\", \"find\", \"delete\", \"archive\", \"tell me a joke\"};","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a `Parser` object with the specified user input string.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * @param s The user input string to be parsed.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" public Parser(String s) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" this.string \u003d s;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" * Gets the command associated with the user input.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" * @return The command represented as an enum value from the `Commands` enumeration.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" public Commands getResponseValue() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" if (string.toLowerCase().equals(\"tell me a joke\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" return Commands.COPYPASTA;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" int output \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" string \u003d string.toLowerCase();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" for (int i \u003d 0; i \u003c commands.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" if (string.startsWith(commands[i])) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" output \u003d i;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" String temp \u003d commands[output].toUpperCase().trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" return Commands.valueOf(temp);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" * Gets the description or additional input associated with the user command.","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" * @return The description or additional input as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" return string.split(\" \",2).length \u003c 2 ? \" \" : string.split(\" \", 2)[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":55}},{"path":"src/main/java/peko/Peko.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.event.ActionEvent;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.event.EventHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.SaveHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" * The `Peko` class is the main application class for the Peko chat application. It handles user input,","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * manages the graphical user interface (GUI), and orchestrates interactions with other components.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"public class Peko extends Application {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" private UserInputHandler userInputHandler;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" private StorageHandler storageHandler;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" private Scene scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" private Image peko \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_67c47d22da73ac2ba89e1e97bce6e525_76dfa232_400.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_cd531dc8ea0423c248426f9f8cf65f72_1a341469_1280.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" * The main entry point for the Peko application.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @param args Command-line arguments (not used).","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" //Application.launch(GUIController.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" //new Peko().run();","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" * Runs the Peko chat application. Displays an introduction, processes user input, and saves data.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" public void run() {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" Output.intro();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" while (true) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler.newInput();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" if (!userInputHandler.processInput()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"End\");","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" Output.exit();","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" * Gets the response from the chat application for a given input.","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" * @param s The user input to be processed.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" * @return The response generated by the chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" public String getResponse(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler.newInput(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" return userInputHandler.getResponse();","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" public Peko() {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler \u003d new UserInputHandler();","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" storageHandler \u003d new StorageHandler();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" * Initializes the Peko chat application\u0027s GUI and sets up its components.","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" stage.setTitle(\"PekoBot\");","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":" * Creates a JavaFX Label widget with the specified text and sets it to wrap text within its bounds.","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"ji-just-ji"},"content":" * @param text The text to be displayed on the Label.","lastModifiedDate":"2023-09-15"},{"lineNumber":158,"author":{"gitId":"ji-just-ji"},"content":" * @return A new Label widget configured with the provided text and text wrapping enabled.","lastModifiedDate":"2023-09-15"},{"lineNumber":159,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":160,"author":{"gitId":"ji-just-ji"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"ji-just-ji"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"ji-just-ji"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"ji-just-ji"},"content":" return textToAdd;","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":167,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":168,"author":{"gitId":"ji-just-ji"},"content":" * Handles user input in the chat application.","lastModifiedDate":"2023-09-15"},{"lineNumber":169,"author":{"gitId":"ji-just-ji"},"content":" * This method processes the user\u0027s input, generates a response, and updates the conversation view.","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"ji-just-ji"},"content":" * It performs the following steps:","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"ji-just-ji"},"content":" * 1. Retrieves the text entered by the user from the input field.","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ji-just-ji"},"content":" * 2. Passes the user\u0027s input to the \u0027userInputHandler\u0027 for processing.","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"ji-just-ji"},"content":" * 3. Creates a label to display the user\u0027s input.","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"ji-just-ji"},"content":" * 4. Prints \"Processing\" to the console.","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"ji-just-ji"},"content":" * 5. Retrieves a response from the \u0027userInputHandler\u0027.","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"ji-just-ji"},"content":" * 6. Constructs dialog boxes for both user and \u0027duke\u0027 (assuming \u0027user\u0027 and \u0027peko\u0027 are images).","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"ji-just-ji"},"content":" * 7. Adds the dialog boxes to the conversation view.","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"ji-just-ji"},"content":" * 8. Clears the user input field.","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":180,"author":{"gitId":"ji-just-ji"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":181,"author":{"gitId":"ji-just-ji"},"content":" String text \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":182,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler.newInput(text);","lastModifiedDate":"2023-09-11"},{"lineNumber":183,"author":{"gitId":"ji-just-ji"},"content":" Label userText \u003d new Label(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Processing\");","lastModifiedDate":"2023-09-12"},{"lineNumber":185,"author":{"gitId":"ji-just-ji"},"content":" Label dukeText \u003d new Label(userInputHandler.getResponse());","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"ji-just-ji"},"content":" DialogBox userDB \u003d DialogBox.getUserDialog(userText, new ImageView(user));","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"ji-just-ji"},"content":" DialogBox pekoDB \u003d DialogBox.getPekoDialog(dukeText, new ImageView(peko));","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"ji-just-ji"},"content":" userDB,","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"ji-just-ji"},"content":" pekoDB","lastModifiedDate":"2023-09-08"},{"lineNumber":191,"author":{"gitId":"ji-just-ji"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":192,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":193,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ji-just-ji":196}},{"path":"src/main/java/peko/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"public class UI {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":6}},{"path":"src/main/java/peko/UserInputHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.TaskHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" * The `UserInputHandler` class manages user input for the Peko chat application. It reads and processes","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" * user commands, initializes a scanner to read input, and delegates command processing to the `TaskHandler`.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"public class UserInputHandler {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" private static final String introText \u003d \"Konpeko, Konpeko, Konpeko! \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \"Hololive san kisei no\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" \"Usada Pekora-peko! almondo almondo!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" private static final String exitText \u003d \"Otsupeko! Bye bye!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private Commands command;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" private Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" * Constructor for the UserInputHandler class.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * Initializes a new instance of the StorageHandler class.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" public UserInputHandler() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" new StorageHandler();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * Reads and processes new user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * This method initializes a Scanner to read input from the console,","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" * parses the input using a Parser instance, and stores the resulting","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" * command and description for further processing.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" public void newInput() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" command \u003d parser.getResponseValue();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" description \u003d parser.getDescription();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" * Sets the user input for processing.","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * @param s The user input string to be processed.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" public void newInput(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" Parser parser \u003d new Parser(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" command \u003d parser.getResponseValue();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" description \u003d parser.getDescription();","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" * Gets the response generated based on the user input.","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" * @return The response generated for the user\u0027s command.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" TaskHandler taskHandler \u003d new TaskHandler(command, description);","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" return taskHandler.getResponse();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" * Processes the user input and executes the associated command.","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" * @return True if the application should continue, false if it should exit.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" public boolean processInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" TaskHandler taskHandler \u003d new TaskHandler(command, description);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" return taskHandler.run();","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":78}},{"path":"src/main/java/peko/commands/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" * The {@code Commands} enum represents various commands possible.","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"public enum Commands {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" ECHO,","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" OTSUPEKO,","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" LIST,","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" WRITE,","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" MARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" UNMARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" EVENT,","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" FIND,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" DELETE,","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" ARCHIVE,","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" COPYPASTA","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":24}},{"path":"src/main/java/peko/commands/Find.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The Find class is responsible for searching and displaying tasks based on a search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It retrieves tasks from a storage handler matching the search criteria and provides a method","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" * to display the results.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"public class Find {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private Task[] tempTaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private String searchQuery;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a Find object with a specific search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @param s the search query to search for tasks with.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" public Find(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Find: \" + s);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" if (s.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You\u0027re not searching for anything Peko?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" searchQuery \u003d s;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" tempTaskList \u003d new Task[100];","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" search();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" //display();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * Private method to search for tasks that match the provided search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * It populates the {@code tempTaskList} with matching tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" private void search() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" this.tempTaskList \u003d StorageHandler.search(searchQuery);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" * Displays the search results in a formatted string.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @return A string containing the formatted search results.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public String display() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" for (Task t : tempTaskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" if (t \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d t + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ji-just-ji":57}},{"path":"src/main/java/peko/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.exceptions;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" * The InvalidTaskException is a custom exception class that is thrown when an invalid task","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" * is encountered in the application. This exception is for when the user tries to create a task","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" * that is not in the right format.","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" private String errorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" * Constructs an InvalidTaskException without a specific error message.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" public InvalidTaskException() {}","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * Constructs an {@code InvalidTaskException} with a specific error message.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * @param s The error message describing the issue with the invalid task.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" public InvalidTaskException(String s) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" this.errorMessage \u003d s;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" * Overrides the default toString method to provide a general error message when the","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" * exception is converted to a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" * @return A general error message indicating that the provided task is invalid.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" return \"That\u0027s Not a task BAKATARE!!!!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" * Provides a more detailed error message when the exception is converted to a string using","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" * this method. This includes the general error message along with the specific error message","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" * describing the issue with the invalid task.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * @return A detailed error message describing the issue with the invalid task.","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" public String errorToString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" return \"Something is wrong with this task peko.Peko!\\n\" + errorMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":47}},{"path":"src/main/java/peko/memory/ArchiveHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.memory;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import java.io.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * The ArchiveHandler class is responsible for managing the archival of tasks and retrieval of archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * It provides methods to archive tasks and load archived tasks from a file.","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" * Archived tasks are stored in a text file in a specific format.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * This class supports the storage and retrieval of various task types, such as Todos, Deadlines, and Events.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * Usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * - To archive a task, call the \u0027archive\u0027 method, providing the task to be archived.","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" * - To load archived tasks, use the \u0027fileManager\u0027 method to read and parse the archived task data.","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * - This class ensures that each task is archived only once.","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"public class ArchiveHandler {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" private static File file \u003d new File(\"src/main/Archive.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" private static PrintWriter printWriter;","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" private static ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" private static HashMap\u003cString, Boolean\u003e map \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" * Archives a task by storing it in the archive file.","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * This method takes a Task object, stores it in the archive file, and marks it as archived to prevent duplicate archiving.","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" * It performs the following steps:","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" * 1. Calls the \u0027fileManager\u0027 method to initialize the archive file and load existing archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" * 2. Prints the string representation of the task to the console.","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" * 3. Checks if the task has already been archived using its string representation as a key in the \u0027map\u0027 data structure.","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" * 4. If the task is not already archived, it converts the task to a string representation using \u0027toStore\u0027 method.","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" * 5. Appends the string representation to the archive file with a newline character.","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * @param task The Task object to be archived.","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @throws RuntimeException If there is an IOException while writing to the archive file.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public static void archive(Task task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" fileManager();","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" if (!map.getOrDefault(task.toString(), false)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" String toStore \u003d task.toStore() + \"\\n\";","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" Writer temp;","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" temp \u003d new BufferedWriter(new FileWriter(\"src/main/Archive.txt\", true));","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" temp.append(toStore);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" temp.close();","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" throw new RuntimeException(ex);","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * Manages the archive file by initializing it and loading existing archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" * This method performs the following tasks:","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * 1. Checks if the archive file exists. If not, it creates a new file named \"List.txt\" in the same directory.","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" * 2. If the archive file exists, it reads its contents and parses them to recover archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" * 3. It uses a Scanner to read lines from the archive file, splitting each line into task data.","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" * 4. Converts the task data back to Task objects using the \u0027stringToTask\u0027 method.","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" * 5. If a valid Task is recovered, it adds it to the \u0027list\u0027 of archived tasks and marks it as archived in the \u0027map\u0027.","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" * @throws RuntimeException If there is an IOException while reading the archive file or if the archive file does not exist.","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" private static void fileManager() {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" File temp \u003d new File(file.getParentFile(), \"List.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" file \u003d temp;","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" Scanner scanner \u003d new Scanner(file.getAbsoluteFile());","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" String s \u003d scanner.nextLine();","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" String[] arr \u003d s.split(\" \\\\| \");","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d stringToTask(arr);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":" if (t !\u003d null \u0026\u0026 !map.getOrDefault(t.toString(), false)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" map.put(t.toString(), true);","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" list.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" * Converts an array of task data strings into a Task object.","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" * This method takes an array of strings containing task data and converts it into a Task object, which can be of type ToDos, Deadline, or Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" * The task data is expected to be in a specific format, and this method handles the conversion.","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" * @param arr An array of strings containing task data.","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" * @return A Task object representing the parsed task data, or null if the data is incomplete or invalid.","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task data represents an invalid task type.","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" * @throws IndexOutOfBoundsException If the task data array does not contain enough elements.","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" private static Task stringToTask(String[] arr) {","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" Task t;","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" switch (arr[0]) {","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" case \"T\":","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new ToDos( arr[2]);","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" case \"D\":","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Deadline(arr[2] + \" /by \" + arr[3]);","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" case \"E\":","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Event(arr[2] + \" /from \" + arr[3] + \" /to \" + arr[4]);","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Incomplete task an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" return null;","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" public static String readArchive() {","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" fileManager();","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" for(Task t : list) {","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d t.toString() + \"\\n\";","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":" return out \u003d\u003d \"\" ? \"Nani mo nai Peko\" : out;","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":156}},{"path":"src/main/java/peko/memory/SaveHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.memory;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import java.io.*;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"public class SaveHandler {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private static int listSize \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" private static Task[] tasks \u003d new Task[100];","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" private static File file \u003d new File(\"src/main/List.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * Saves tasks to a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * This method clears the existing file content, then iterates through the task list,","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * converting each task to a line of tex and appending it to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * If the file is not found, a new file is created.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" public static void saveTo() {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(file.getAbsolutePath());","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" PrintWriter printWriter;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" printWriter \u003d new PrintWriter(file.getAbsoluteFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" printWriter.write(\"\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" printWriter.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" File temp \u003d new File(file.getParentFile(), \"List.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" file \u003d temp;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" } finally {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" if (t \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" String toStore \u003d t.toStore() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(\"toStore: \" + toStore);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" Writer temp;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" temp \u003d new BufferedWriter(new FileWriter(\"src/main/List.txt\", true));","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" temp.append(toStore);","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" temp.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" throw new RuntimeException(ex);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" * Loads tasks from a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * This method reads the content of the file, parses each line to create tasks,","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" * and populates the tasks array with the loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * @return An array of tasks loaded from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" public static Task[] loadFrom() {","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(file.getAbsolutePath());","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" int pos \u003d 0;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" Scanner scanner \u003d new Scanner(file.getAbsoluteFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" String s \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" String[] arr \u003d s.split(\" \\\\| \");","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d stringToTask(arr);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" if (t !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" tasks[pos] \u003d t;","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" pos++;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" listSize \u003d pos;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" } catch (Exception e){","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" return tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" * Converts a string array to a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" * This method takes a string array containing task details and converts it into a Task object,","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" * handling various task types (ToDos, Deadlines, and Events) and marking done as needed.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" * @param arr The string array containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" * @return A Task object created from the provided string array, or null if parsing fails.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" private static Task stringToTask(String[] arr) {","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" Task t;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" switch (arr[0]) {","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" case \"T\":","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new ToDos( arr[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" case \"D\":","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Deadline(arr[2] + \" /by \" + arr[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" case \"E\":","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Event(arr[2] + \" /from \" + arr[3] + \" /to \" + arr[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Incomplete task an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" return null;","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" public static int size() {","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" return listSize;","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":145}},{"path":"src/main/java/peko/memory/StorageHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.memory;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" * The StorageHandler class is responsible for managing the storage and retrieval of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" * It interacts with the `SaveHandler` class to load and save tasks from/to a text file. This class","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" * also provides methods for adding, marking, unmarking, searching, and deleting tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"public class StorageHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" private static Task[] todoList;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" private static int size;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * Constructor for the StorageHandler class.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * Initializes the todoList by loading tasks from a txt file using SaveHandler","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * and stores the size of the stored list.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" public StorageHandler() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" todoList \u003d SaveHandler.loadFrom();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" size \u003d SaveHandler.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" * Reads the array of tasks and formats them as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string containing the tasks in the list.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" public static String readArray() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"--------------LIST-PEKO------------------\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" while (todoList[i] !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (i+1 + \". \" + todoList[i] + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" if (i \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"You are FREE PEKO!!!!!\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" * Adds a task to the array of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * @param t The task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" * @return A message indicating the task was added successfully.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" public static String addToArray(Task t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" todoList[size] \u003d t;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"Added: \\n \" + todoList[size].toString() + \"\\npeko!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d \"You have: \" + (size+1) + \" tasks now peko\";","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" size++;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * Marks a task as done in the array of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" * @param i The index of the task to be marked as done (1-based).","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * @return A message indicating the task was marked as done successfully.","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" public static String setMarkArray(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" String out;","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" todoList[i-1].setMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" out \u003d \"Marked as done peko!\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (\" \" + todoList[i-1] + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"You don\u0027t have so many Tasks Peko!\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" * Unmarks a task as done in the array of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" * @param i The index of the task to be unmarked as done (1-based).","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":" * @return A message indicating the task was unmarked as done successfully.","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" public static String setUnmarkArray(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" todoList[i-1].setUnmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (\"You haven\u0027t done this yet peko?!\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (\" \" + todoList[i-1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"You don\u0027t have so many Tasks Peko!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" * Searches for tasks in the array of tasks that match a search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" * @param searchQuery The search query used to match tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" * @return An array of tasks that match the search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" public static Task[] search(String searchQuery) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" Task[] temp \u003d todoList;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" Task[] tempOutput \u003d new Task[100];","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" int pos \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" for (Task t : temp) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" if (t \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"break\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" if (t.hasString(searchQuery)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" tempOutput[pos] \u003d t;","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" pos++;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" return tempOutput;","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" * Deletes a task from the todoList array.","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" * This method removes the task at the specified index by shifting subsequent tasks up,","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" * updates the size counter, and saves the updated task list using SaveHandler.","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":" * @param i The index of the task to be deleted (1-based).","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" public static void setDelete(int i) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" i--;","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" while (i \u003c\u003d size) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" todoList[i] \u003d todoList[i+1];","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" todoList[i] \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" size--;","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" * Reads and returns a text file containing copypasta text.","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":" * @return The copypasta text read from the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" * @throws FileNotFoundException If the file is not found.","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" public static String degen() throws FileNotFoundException {","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":" File text \u003d new File(\"src/main/Copypasta.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":" Scanner sc \u003d new Scanner(text);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":" String temp \u003d (sc.nextLine() + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d temp;","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"ji-just-ji"},"content":" public static String archive(int i) {","lastModifiedDate":"2023-09-15"},{"lineNumber":163,"author":{"gitId":"ji-just-ji"},"content":" if (i \u003e\u003d size) {","lastModifiedDate":"2023-09-15"},{"lineNumber":164,"author":{"gitId":"ji-just-ji"},"content":" return \"You don\u0027t have that Task Peko\";","lastModifiedDate":"2023-09-15"},{"lineNumber":165,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":166,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d todoList[i-1];","lastModifiedDate":"2023-09-15"},{"lineNumber":167,"author":{"gitId":"ji-just-ji"},"content":" ArchiveHandler.archive(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":168,"author":{"gitId":"ji-just-ji"},"content":" setDelete(i);","lastModifiedDate":"2023-09-15"},{"lineNumber":169,"author":{"gitId":"ji-just-ji"},"content":" return \"I have Archived the task Peko!\";","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ji-just-ji":172}},{"path":"src/main/java/peko/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.DateTimeHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * The Deadline class represents a task with a deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" * It extends the Task class and includes additional functionality for handling deadlines.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" char type \u003d \u0027D\u0027;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" DateTimeHandler dateTimeHandler;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a Deadline object with the specified description.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the deadline task, including the task name and deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the provided description is invalid or missing essential parts.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" public Deadline(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" String[] split \u003d s.split(\" /by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s no deadline peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" } else if (split.length \u003e\u003d 3){","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You can\u0027t have two deadlines peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" String[] temp \u003d split[0].split(\" \",2);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(Arrays.toString(temp));","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d split[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(split[0]);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" dateTimeHandler \u003d new DateTimeHandler(split[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * Converts the Deadline object to a formatted string representation.","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representing the deadline task, including its type, status,","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" * task name, and deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" return \"[\" + type + \"]\" + super.toString() + \" (by: \" + dateTimeHandler.stringDisplay() + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" * Converts the Deadline object to a string for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the deadline task suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" String state \u003d this.status ? \"0\" : \"1\";","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" String output \u003d \"D\" + \" | \" + state + \" | \" + this.name + \" | \" + dateTimeHandler.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof Deadline) {","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" return this.name.equals(((Deadline) o).name) \u0026\u0026 dateTimeHandler.equals(((Deadline) o).dateTimeHandler);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":69}},{"path":"src/main/java/peko/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.DateTimeHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The Event class represents a task that spans a period, starting and ending at specific times.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It extends the Task class and includes additional functionality for handling events.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" private char type \u003d \u0027E\u0027;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private DateTimeHandler startHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private DateTimeHandler endHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * Constructs an Event object with the specified description.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the event task, including the task name, start time, and end time.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the provided description is invalid or missing essential parts.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" public Event(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" String[] split \u003d s.split(\" /from \");","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s no start date peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" } else if (split.length \u003e\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You can\u0027t have two start dates peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" split[0].split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d split[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" split \u003d split[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s no end date peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" } else if (split.length \u003e\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You can\u0027t have two end dates peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" startHandler \u003d new DateTimeHandler(split[0]);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" endHandler \u003d new DateTimeHandler(split[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" * Converts the {@code Event} object to a formatted string representation.","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representing the event task, including its type, status,","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * task name, start time, and end time.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" return \"[\" + type + \"]\" + super.toString() + \" (from: \" + startHandler.stringDisplay()","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" + \" to: \" + endHandler.stringDisplay() + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" * Converts the {@code Event} object to a string for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the event task suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" String curr \u003d this.status ? \"0\" : \"1\";","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" return \"E\" + \" | \" + curr + \" | \" + this.name + \" | \" + startHandler.toString() + \" | \" + endHandler.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" private boolean equalDateTimeChecker(DateTimeHandler d1, DateTimeHandler d2) {","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" return d1.equals(d2);","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof Event) {","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" return name.equals(((Event) o).name) \u0026\u0026 equalDateTimeChecker(((Event) o).startHandler, startHandler)","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" \u0026\u0026 equalDateTimeChecker(((Event) o).endHandler, endHandler);","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":79}},{"path":"src/main/java/peko/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The Task class represents a basic task with a name and a completion status.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It serves as the base class for various task types, such as ToDos, Deadlines, and Events.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" protected String tag;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" protected String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" protected boolean status;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a Task object with the specified name.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @param s The name of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the provided name is blank or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" public Task(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" if (s.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d s;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" * Returns a formatted string representation of the task, including its completion status and name.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representing the task, with a checkbox indicating completion status.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d status ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" return out + name;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * Marks the task as completed by setting its completion status to true.","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" public void setMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" status \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * Unmarks the task as completed by setting its completion status to false.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" public void setUnmark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" * Checks if the task\u0027s name contains a specific string.","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" * @param s The string to search for in the task\u0027s name.","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" * @return True if the task\u0027s name contains the specified string; otherwise, false.","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" public boolean hasString(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" return name.contains(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * Converts the task object to a string for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the task suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" String state \u003d status ? \"0\" : \"1\";","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" return state + \" | \" + this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" return this.status;","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof Task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" return this.name.equals(((Task) o).name);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ji-just-ji":85}},{"path":"src/main/java/peko/tasks/TaskHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Find;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.ArchiveHandler;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.SaveHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * The TaskHandler class is responsible for processing user commands related to task management","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * and generating appropriate responses or actions.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"public class TaskHandler {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" private static final String lineBreak \u003d \"------------------------------------------\"; //42","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private Commands command;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a TaskHandler object with the specified user command and description.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" * @param description The description or additional input associated with the command.","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" public TaskHandler(Commands command, String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * Echos back the user\u0027s input or displays a message if the input is blank.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" * @return The echoed user input or a message.","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" private String echo() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" String out;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" out \u003d \"You didn\u0027t say anything peko?\";","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" out \u003d description;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" * Reads and retrieves a list of tasks as a formatted string.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string containing the list of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" private String readArray() {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" return StorageHandler.readArray() + lineBreak;","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new task with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" private String addToArray() throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new Task(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" * Marks a task as done based on the provided task index.","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" * @param s The index of the task to be marked as done (as a string).","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the task has been marked as done.","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" * @throws NumberFormatException If the provided index is not a valid number.","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" private String mark(String s) throws NumberFormatException{","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.setMarkArray(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" * Unmarks a task as done based on the provided task index.","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" * @param s The index of the task to be unmarked (as a string).","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the task has been unmarked.","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" * @throws NumberFormatException If the provided index is not a valid number.","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" private String unmark(String s) throws NumberFormatException{","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.setUnmarkArray(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new task of the specified type with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" private String todo(String s) throws InvalidTaskException{","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new ToDos(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new deadline task with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the deadline task.","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" private String deadline(String s) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new Deadline(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new event task with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" private String Event(String s) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new Event(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":" * Finds and displays tasks that match the provided search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" * @param s The search query used to filter tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string containing the matching tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" private String Find(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" Find find \u003d new Find(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d find.display();","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"ji-just-ji"},"content":" * Deletes a task from the task list based on the provided task index.","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":159,"author":{"gitId":"ji-just-ji"},"content":" * @param s The index of the task to be deleted (as a string).","lastModifiedDate":"2023-09-12"},{"lineNumber":160,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the deletion of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":161,"author":{"gitId":"ji-just-ji"},"content":" * @throws NumberFormatException If the provided index is not a valid number.","lastModifiedDate":"2023-09-12"},{"lineNumber":162,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"ji-just-ji"},"content":" public String delete(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"ji-just-ji"},"content":" StorageHandler.setDelete(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"I have deleted the task Peko\";","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"ji-just-ji"},"content":" public String archive(String s) {","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"ji-just-ji"},"content":" if (s.isBlank()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d ArchiveHandler.readArchive();","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"ji-just-ji"},"content":" return StorageHandler.archive(i);","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":180,"author":{"gitId":"ji-just-ji"},"content":" * Processes the user command, performs corresponding actions, and returns a response.","lastModifiedDate":"2023-09-12"},{"lineNumber":181,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"ji-just-ji"},"content":" * @return A response message based on the executed command.","lastModifiedDate":"2023-09-12"},{"lineNumber":183,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"ji-just-ji"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-08"},{"lineNumber":185,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"Gomen Peko I don\u0027t understand\";","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"ji-just-ji"},"content":" ;","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"ji-just-ji"},"content":" switch (command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":191,"author":{"gitId":"ji-just-ji"},"content":" case ECHO:","lastModifiedDate":"2023-09-08"},{"lineNumber":192,"author":{"gitId":"ji-just-ji"},"content":" out \u003d echo();","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":194,"author":{"gitId":"ji-just-ji"},"content":" case LIST:","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"ji-just-ji"},"content":" out \u003d readArray();","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"ji-just-ji"},"content":" case WRITE:","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"ji-just-ji"},"content":" out \u003d addToArray();","lastModifiedDate":"2023-09-11"},{"lineNumber":199,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":200,"author":{"gitId":"ji-just-ji"},"content":" case MARK:","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"ji-just-ji"},"content":" out \u003d mark(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"ji-just-ji"},"content":" case UNMARK:","lastModifiedDate":"2023-09-08"},{"lineNumber":204,"author":{"gitId":"ji-just-ji"},"content":" out \u003d unmark(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"ji-just-ji"},"content":" case TODO:","lastModifiedDate":"2023-09-08"},{"lineNumber":207,"author":{"gitId":"ji-just-ji"},"content":" out \u003d todo(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"ji-just-ji"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-08"},{"lineNumber":210,"author":{"gitId":"ji-just-ji"},"content":" out \u003d deadline(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"ji-just-ji"},"content":" case EVENT:","lastModifiedDate":"2023-09-08"},{"lineNumber":213,"author":{"gitId":"ji-just-ji"},"content":" out \u003d Event(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":215,"author":{"gitId":"ji-just-ji"},"content":" case FIND:","lastModifiedDate":"2023-09-08"},{"lineNumber":216,"author":{"gitId":"ji-just-ji"},"content":" out \u003d Find(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":217,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":218,"author":{"gitId":"ji-just-ji"},"content":" case DELETE:","lastModifiedDate":"2023-09-08"},{"lineNumber":219,"author":{"gitId":"ji-just-ji"},"content":" out \u003d delete(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":220,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":221,"author":{"gitId":"ji-just-ji"},"content":" case ARCHIVE:","lastModifiedDate":"2023-09-15"},{"lineNumber":222,"author":{"gitId":"ji-just-ji"},"content":" out \u003d archive(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":223,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-15"},{"lineNumber":224,"author":{"gitId":"ji-just-ji"},"content":" case COPYPASTA:","lastModifiedDate":"2023-09-08"},{"lineNumber":225,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":226,"author":{"gitId":"ji-just-ji"},"content":" return StorageHandler.degen();","lastModifiedDate":"2023-09-08"},{"lineNumber":227,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":228,"author":{"gitId":"ji-just-ji"},"content":" return \"Hentai!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":229,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":230,"author":{"gitId":"ji-just-ji"},"content":" } finally {","lastModifiedDate":"2023-09-08"},{"lineNumber":231,"author":{"gitId":"ji-just-ji"},"content":" return \"Something Went Wrong Peko....\";","lastModifiedDate":"2023-09-08"},{"lineNumber":232,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":233,"author":{"gitId":"ji-just-ji"},"content":" case OTSUPEKO:","lastModifiedDate":"2023-09-08"},{"lineNumber":234,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-09-08"},{"lineNumber":235,"author":{"gitId":"ji-just-ji"},"content":" return \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":236,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":237,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-11"},{"lineNumber":238,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-11"},{"lineNumber":239,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":240,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":241,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":242,"author":{"gitId":"ji-just-ji"},"content":" return e.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":243,"author":{"gitId":"ji-just-ji"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":244,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"That\u0027s not a number Bakatare!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":245,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":246,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":247,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":248,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-11"},{"lineNumber":249,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-11"},{"lineNumber":250,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":251,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":252,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":253,"author":{"gitId":"ji-just-ji"},"content":" * Executes the user command, performs corresponding actions, and returns whether the program should continue running.","lastModifiedDate":"2023-09-12"},{"lineNumber":254,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":255,"author":{"gitId":"ji-just-ji"},"content":" * @return True if the program should continue running; false if it should exit.","lastModifiedDate":"2023-09-12"},{"lineNumber":256,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":257,"author":{"gitId":"ji-just-ji"},"content":" public boolean run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":258,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"ji-just-ji"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":261,"author":{"gitId":"ji-just-ji"},"content":" case ECHO:","lastModifiedDate":"2023-08-28"},{"lineNumber":262,"author":{"gitId":"ji-just-ji"},"content":" echo();","lastModifiedDate":"2023-08-28"},{"lineNumber":263,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":264,"author":{"gitId":"ji-just-ji"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":265,"author":{"gitId":"ji-just-ji"},"content":" readArray();","lastModifiedDate":"2023-08-28"},{"lineNumber":266,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":267,"author":{"gitId":"ji-just-ji"},"content":" case WRITE:","lastModifiedDate":"2023-08-28"},{"lineNumber":268,"author":{"gitId":"ji-just-ji"},"content":" addToArray();","lastModifiedDate":"2023-08-28"},{"lineNumber":269,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":270,"author":{"gitId":"ji-just-ji"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":271,"author":{"gitId":"ji-just-ji"},"content":" mark(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":272,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":273,"author":{"gitId":"ji-just-ji"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":274,"author":{"gitId":"ji-just-ji"},"content":" unmark(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":275,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":276,"author":{"gitId":"ji-just-ji"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":277,"author":{"gitId":"ji-just-ji"},"content":" todo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":278,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":279,"author":{"gitId":"ji-just-ji"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":280,"author":{"gitId":"ji-just-ji"},"content":" deadline(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":281,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":282,"author":{"gitId":"ji-just-ji"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":283,"author":{"gitId":"ji-just-ji"},"content":" Event(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":284,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":285,"author":{"gitId":"ji-just-ji"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"ji-just-ji"},"content":" Find(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"ji-just-ji"},"content":" case DELETE:","lastModifiedDate":"2023-08-28"},{"lineNumber":289,"author":{"gitId":"ji-just-ji"},"content":" delete(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":290,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":291,"author":{"gitId":"ji-just-ji"},"content":" case ARCHIVE:","lastModifiedDate":"2023-09-15"},{"lineNumber":292,"author":{"gitId":"ji-just-ji"},"content":" archive(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":293,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":294,"author":{"gitId":"ji-just-ji"},"content":" case COPYPASTA:","lastModifiedDate":"2023-08-28"},{"lineNumber":295,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":296,"author":{"gitId":"ji-just-ji"},"content":" StorageHandler.degen();","lastModifiedDate":"2023-08-28"},{"lineNumber":297,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":298,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Hentai!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":299,"author":{"gitId":"ji-just-ji"},"content":" } finally {","lastModifiedDate":"2023-08-28"},{"lineNumber":300,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":301,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":302,"author":{"gitId":"ji-just-ji"},"content":" case OTSUPEKO:","lastModifiedDate":"2023-08-28"},{"lineNumber":303,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-28"},{"lineNumber":304,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":305,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":306,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":307,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":308,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":309,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":310,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":311,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":312,"author":{"gitId":"ji-just-ji"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":313,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"That\u0027s not a number Bakatare!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":314,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":315,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":316,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":317,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":318,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":318}},{"path":"src/main/java/peko/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * Represents a \"To-Do\" task.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * A \"To-Do\" task is a simple task without a specific deadline or event time.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" char type \u003d \u0027T\u0027;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a \"To-Do\" task with the specified description.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the description is empty or invalid.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" public ToDos(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d s;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * Returns a string representation of the \"To-Do\" task.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" return \"[\" + type + \"]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" * Converts the \"To-Do\" task to a string suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representation of the task for storage.","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" String state \u003d status ? \"0\" : \"1\";","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" return \"T\" + \" | \" + state + \" | \" + this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof ToDos) {","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" return this.name.equals(((ToDos) o).name);","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":51}},{"path":"src/test/java/peko/ArchiveHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"public class ArchiveHandlerTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" public void storeTest() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new ToDos(\"ye\");","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" ArchiveHandler.archive(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":15}},{"path":"src/test/java/peko/DateTimeHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"public class DateTimeHandlerTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" assertEquals(2,2);","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" public void testValidInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" String s \u003d \"19/11/2001 1023\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" String target \u003d \"NOVEMBER 19 2001 10:23\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" assertEquals(target, (new DateTimeHandler(s)).stringDisplay());","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ji-just-ji":18}},{"path":"src/test/java/peko/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" public void testString() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" Deadline deadline \u003d new Deadline(\"return book /by 28/2/2100 2359\");","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" String correct \u003d \"[D][ ] return book (by: February 28 2100 23:59)\";","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" //assert deadline.toString().equals(correct);","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" public void testString2() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" Deadline deadline \u003d new Deadline(\"read /by 12/2/2200 0000\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" String correct \u003d \"[D][ ] read (by: February 12 2200 00:00)\";","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" //assert deadline.toString().equals(correct);","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":22}},{"path":"src/test/java/peko/EventHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"public class EventHandlerTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" public void sameTaskTest() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" Event e1 \u003d new Event(\"Book /from 2/2/2020 1920 /to 3/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" Event e2 \u003d new Event(\"Book /from 2/2/2020 1920 /to 3/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" assert e1.equals(e2);","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" public void sameTaskTest3() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" Event e1 \u003d new Event(\"Book /from 2/2/2020 1920 /to 3/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" Event e2 \u003d new Event(\"Book /from 2/2/2020 1920 /to 4/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" assert !e1.equals(e2);","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":21}},{"path":"src/test/java/peko/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" public void testMarkAsDone() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" ToDos todo \u003d new ToDos(\"return book\");","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" assert !todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" todo.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" assert todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" public void testMarkAsUnDone() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" ToDos todo \u003d new ToDos(\"return book\");","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" assert !todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" todo.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" assert todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" todo.setUnmark();","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" assert !todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":27}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"otsupeko","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"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":"ji-just-ji"},"content":"java -classpath ..\\bin Peko \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":{"ji-just-ji":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":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"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":"ji-just-ji"},"content":"java -classpath ../bin Peko \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"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":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ji-just-ji":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"# Peko project","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003e Nanimitendayo Pettanko","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"Konpeko Konpeko Konpeko! Hololive sankisei Usada Pekora~peko.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"## What\u0027s This?","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"Let Pekora handle keeping track all your tasks!","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"* Text-Based","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"* Super simple","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"* Easy to use","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"* Peko!","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"## You want your own PekoBot?","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"1. Download your [PEKOBOT]()","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"1. Double click to run","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"1. Add your tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"1. ~~Unleash War Crimes Peko!!!~~","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"No need to pay for youtube membership!","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"Features","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"* [X] Manage Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"* [X] Manage Deadlines","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"* [X] Manage Events","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"* [ ] Reminders (Peko alarm not working yet)","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ji-just-ji":28}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"plugins {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"group \u0027org.example\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"version \u00271.0-SNAPSHOT\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"repositories {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" mavenCentral()","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.7.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:1.7.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ji-just-ji":36}},{"path":"src/main/Archive.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | ye","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | no","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"D | 1 | 5 | 22/2/2023 1920","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"D | 1 | bre | 20/2/2023 1000","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | 6","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":5}},{"path":"src/main/Copypasta.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"So as a joke, I went to my friend\u0027s house wearing Pekora\u0027s","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"wig and clothes. I could barely stop my laughter as he went as red as a tomato","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"and looked at me from head to toe with a bit of drool in his mouth.","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"Nanimitendayo?! Kono Hentai!","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ji-just-ji":4}},{"path":"src/main/List.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | 1","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"D | 1 | 2 | 22/2/23 1000","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"T | 1 | 4","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"ji-just-ji":3}},{"path":"src/main/Usagi.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":" _ _","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"| \\ / |","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\\ \\ / /","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" \\ \\ / /","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" \\ \\_________/ /","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" / \\ / \\","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" / / \\ \\","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"| _____ |","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" \\ \\___/ /","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" \\_________________/","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ji-just-ji":14}},{"path":"src/main/java/GUI/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.lang.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.util.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"ji-just-ji":19}},{"path":"src/main/java/GUI/GUI.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.shape.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.text.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"\u003cBorderPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"400.0\" prefWidth\u003d\"600.0\" xmlns\u003d\"http://javafx.com/javafx/11.0.14-internal\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" \u003ctop\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"60.0\" prefWidth\u003d\"600.0\" styleClass\u003d\"gray-background\" stylesheets\u003d\"@../Values/style.css\" BorderPane.alignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" \u003cStackPane alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"60.0\" prefWidth\u003d\"162.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" \u003cCircle fill\u003d\"DODGERBLUE\" radius\u003d\"32.0\" stroke\u003d\"LIME\" strokeType\u003d\"INSIDE\" strokeWidth\u003d\"3.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \u003cImageView fitHeight\u003d\"64.0\" fitWidth\u003d\"66.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e\u003c/StackPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox alignment\u003d\"CENTER\" prefHeight\u003d\"71.0\" prefWidth\u003d\"629.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" \u003cText fill\u003d\"#7ec2fe\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"兎田ぺこら\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" \u003cFont name\u003d\"Bauhaus 93\" size\u003d\"48.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" \u003c/top\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"\u003c/BorderPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":30}},{"path":"src/main/java/GUI/HeaderCircle.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.lang.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import java.util.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"\u003cAnchorPane xmlns\u003d\"http://javafx.com/javafx\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml\"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" fx:controller\u003d\"GUI.HeaderCircle\"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" prefHeight\u003d\"400.0\" prefWidth\u003d\"600.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":15}},{"path":"src/main/java/GUI/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"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\"peko.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"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-07"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"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-07"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" styleClass\u003d\"white-background\" stylesheets\u003d\"@../Values/style.css\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" styleClass\u003d\"white-background\" stylesheets\u003d\"@../Values/style.css\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox prefHeight\u003d\"78.0\" prefWidth\u003d\"400.0\" styleClass\u003d\"gray-background\" stylesheets\u003d\"@../Values/style.css\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" \u003cStackPane alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"60.0\" prefWidth\u003d\"162.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" \u003cCircle fill\u003d\"DODGERBLUE\" radius\u003d\"32.0\" stroke\u003d\"LIME\" strokeType\u003d\"INSIDE\" strokeWidth\u003d\"3.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" \u003cImageView fitHeight\u003d\"66.0\" fitWidth\u003d\"67.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" \u003cImage url\u003d\"@../../resources/Pics/tumblr_67c47d22da73ac2ba89e1e97bce6e525_76dfa232_400.png\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" \u003cHBox alignment\u003d\"CENTER\" prefHeight\u003d\"71.0\" prefWidth\u003d\"629.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" \u003cText fill\u003d\"#7ec2fe\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"兎田ぺこら\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" \u003cFont name\u003d\"Bauhaus 93\" size\u003d\"48.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"ji-just-ji":49}},{"path":"src/main/java/module-info.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"module ip.main {","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":" requires javafx.graphics;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":" requires javafx.controls;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" requires javafx.fxml;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" requires org.junit.jupiter.api;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" opens peko;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" opens peko.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" opens peko.exceptions;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" opens peko.memory;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" opens peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":11}},{"path":"src/main/java/peko/DateTimeHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"public class DateTimeHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" private String dateTimeString;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private int year;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private int month;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" private int day;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" private int hour;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" private int min;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a DateTimeHandler object from a string representation of date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * This constructor takes a string containing date and time information, parses it,","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * and initializes the DateTimeHandler object with the parsed values.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * @param s The string representation of date and time in the format \"dd/mm/yyyy HHmm\".","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" public DateTimeHandler(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" String[] dateTime \u003d s.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" String[] dateString \u003d dateTime[0].split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" int timeString \u003d Integer.parseInt(dateTime[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" day \u003d Integer.parseInt(dateString[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" month \u003d Integer.parseInt(dateString[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" year \u003d Integer.parseInt(dateString[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" hour \u003d timeString/100;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" min \u003d timeString%100;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" date \u003d LocalDateTime.of(year,month,day,hour,min);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" dateTimeString \u003d date.getMonth() + \" \" + date.getDayOfMonth() + \" \" + date.getYear();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" dateTimeString \u003d date.format(format);","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * Generates a formatted string representation of date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" * This method creates and returns a string containing the date, time, and padded minutes.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representation of date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" public String stringDisplay() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" return dateTimeString;","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" //return dateTimeString + \" \" + hour + \":\" + ((min \u003c 10) ? \"0\" + min : min);","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" * Returns a string representation of the date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" * This method generates and returns a string containing the formatted date and time,","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" * with day, month, year, hour, and optional padded minutes.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" return day + \"/\" + month + \"/\" + year + \" \" + hour + ((min \u003c 10) ? \"0\" + min : min);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof DateTimeHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" return date.equals(((DateTimeHandler) o).date);","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ji-just-ji":73}},{"path":"src/main/java/peko/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * The `DialogBox` class is used to create custom dialog boxes for a chat interface.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * It extends `HBox` and consists of a label for text and an image view for a display picture (e.g., user\u0027s avatar).","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private Label text;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * Creates a new `DialogBox` with the specified label and image view.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * @param l The label containing the text to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" * @param iv The image view containing the display picture to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" text \u003d l;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" * Flips the alignment of the dialog box to create Peko\u0027s dialog box (aligned to the top left).","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" * Creates and returns a user\u0027s dialog box with the specified label and image view.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" * @param l The label containing the text to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" * @param iv The image view containing the display picture to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" * @return A user\u0027s dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" * Creates and returns Peko\u0027s dialog box (flipped for alignment) with the specified label and image view.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * @param l The label containing the text to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" * @param iv The image view containing the display picture to be displayed in the dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" * @return Peko\u0027s dialog box.","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" public static DialogBox getPekoDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"ji-just-ji":72}},{"path":"src/main/java/peko/GUIController.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.Initializable;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":"import java.net.URL;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":"import java.util.ResourceBundle;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" * The `GUIController` class manages the graphical user interface (GUI) for the chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" * It handles user input, displays chat messages, and manages the layout of UI elements.","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"public class GUIController extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" private Scene scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" private Image pekoIcon \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_67c47d22da73ac2ba89e1e97bce6e525_76dfa232_400.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" private Image userIcon \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_cd531dc8ea0423c248426f9f8cf65f72_1a341469_1280.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" * The main entry point for the JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" stage.setTitle(\"Peko\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a label for a chat message and configures its properties.","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" * @param text The text content of the label (chat message).","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" * @return A configured label for displaying a chat message.","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" return textToAdd;","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" * Handles user input when the \"Send\" button is clicked or the Enter key is pressed.","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ji-just-ji":141}},{"path":"src/main/java/peko/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The `Launcher` class is responsible for launching the Peko JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It includes the main method, which serves as the entry point for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * The main method that launches the Peko JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * @param args The command-line arguments passed to the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" Application.launch(Peko.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ji-just-ji":20}},{"path":"src/main/java/peko/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" * The `Main` class serves as the main entry point for the Peko JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * It extends the JavaFX `Application` class and sets up the application\u0027s user interface.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" private Peko peko \u003d new Peko();","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * The main entry point for the JavaFX application.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setPeko(peko);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"ji-just-ji":36}},{"path":"src/main/java/peko/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * The `MainWindow` class controls the main user interface of the Peko chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * It manages the layout and interactions of UI components such as the scroll pane, dialog container,","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * user input field, and send button.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"public class MainWindow {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" private Peko peko;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" private Image pekoImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Dapeko.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * Initializes the main window by binding the scroll pane\u0027s vertical value to the dialog container\u0027s height.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" * Sets the Peko instance for this main window.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @param p The Peko instance to associate with this main window.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public void setPeko(Peko p) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" peko \u003d p;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"ji-just-ji":50}},{"path":"src/main/java/peko/Output.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":" * The `Output` class provides static methods to handle console output and display messages,","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" * including an introduction message and an exit message for the Peko chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"public class Output {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" private static final String lineBreak \u003d \"------------------------------------------\"; //42","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" private static final String introText \u003d \"Konpeko, Konpeko, Konpeko! \\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" + \"Hololive san kisei no\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" + \"Usada Pekora-peko! almondo almondo!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private static final String exitText \u003d \"Otsupeko! Bye bye!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Displays the introduction message, including a Peko-themed logo and a greeting.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" public static void intro() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" String pekoLogo \u003d \" _____ _\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" + \"| |___ | | ______\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" + \"| ___/ _ \\\\| |/ / \\\\\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" + \"| | \u003c __/| \u003c \u003c\u003e |\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" + \"|_| \\\\___||_|\\\\_\\\\____/\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(pekoLogo);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(introText);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" * Displays the exit message when the Peko chat application is exiting.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" public static void exit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(exitText);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":36}},{"path":"src/main/java/peko/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The `Parser` class is responsible for parsing user input and determining the appropriate","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * command and description for the Peko chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private String string;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private static final String[] commands \u003d new String[]","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" {\"echo\",\"otsupeko\", \"list\", \"write\", \"mark\", \"unmark\",","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \"todo\", \"deadline\", \"event\", \"find\", \"delete\", \"archive\", \"tell me a joke\"};","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a `Parser` object with the specified user input string.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * @param s The user input string to be parsed.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" public Parser(String s) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" this.string \u003d s;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" * Gets the command associated with the user input.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" * @return The command represented as an enum value from the `Commands` enumeration.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" public Commands getResponseValue() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" if (string.toLowerCase().equals(\"tell me a joke\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" return Commands.COPYPASTA;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" int output \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" string \u003d string.toLowerCase();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" for (int i \u003d 0; i \u003c commands.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" if (string.startsWith(commands[i])) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" output \u003d i;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" String temp \u003d commands[output].toUpperCase().trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" return Commands.valueOf(temp);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" * Gets the description or additional input associated with the user command.","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" * @return The description or additional input as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" return string.split(\" \",2).length \u003c 2 ? \" \" : string.split(\" \", 2)[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":55}},{"path":"src/main/java/peko/Peko.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import javafx.event.ActionEvent;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import javafx.event.EventHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.SaveHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" * The `Peko` class is the main application class for the Peko chat application. It handles user input,","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * manages the graphical user interface (GUI), and orchestrates interactions with other components.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"public class Peko extends Application {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" private UserInputHandler userInputHandler;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" private StorageHandler storageHandler;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" private Scene scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" private Image peko \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_67c47d22da73ac2ba89e1e97bce6e525_76dfa232_400.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/Pics/tumblr_cd531dc8ea0423c248426f9f8cf65f72_1a341469_1280.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" * The main entry point for the Peko application.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @param args Command-line arguments (not used).","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" //Application.launch(GUIController.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" //new Peko().run();","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" * Runs the Peko chat application. Displays an introduction, processes user input, and saves data.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" public void run() {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" Output.intro();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" while (true) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler.newInput();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" if (!userInputHandler.processInput()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"End\");","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" Output.exit();","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" * Gets the response from the chat application for a given input.","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" * @param s The user input to be processed.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" * @return The response generated by the chat application.","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" public String getResponse(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler.newInput(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" return userInputHandler.getResponse();","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" public Peko() {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler \u003d new UserInputHandler();","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" storageHandler \u003d new StorageHandler();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" * Initializes the Peko chat application\u0027s GUI and sets up its components.","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" stage.setTitle(\"PekoBot\");","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":" * Creates a JavaFX Label widget with the specified text and sets it to wrap text within its bounds.","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"ji-just-ji"},"content":" * @param text The text to be displayed on the Label.","lastModifiedDate":"2023-09-15"},{"lineNumber":158,"author":{"gitId":"ji-just-ji"},"content":" * @return A new Label widget configured with the provided text and text wrapping enabled.","lastModifiedDate":"2023-09-15"},{"lineNumber":159,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":160,"author":{"gitId":"ji-just-ji"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"ji-just-ji"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"ji-just-ji"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"ji-just-ji"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"ji-just-ji"},"content":" return textToAdd;","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":167,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":168,"author":{"gitId":"ji-just-ji"},"content":" * Handles user input in the chat application.","lastModifiedDate":"2023-09-15"},{"lineNumber":169,"author":{"gitId":"ji-just-ji"},"content":" * This method processes the user\u0027s input, generates a response, and updates the conversation view.","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"ji-just-ji"},"content":" * It performs the following steps:","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"ji-just-ji"},"content":" * 1. Retrieves the text entered by the user from the input field.","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ji-just-ji"},"content":" * 2. Passes the user\u0027s input to the \u0027userInputHandler\u0027 for processing.","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"ji-just-ji"},"content":" * 3. Creates a label to display the user\u0027s input.","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"ji-just-ji"},"content":" * 4. Prints \"Processing\" to the console.","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"ji-just-ji"},"content":" * 5. Retrieves a response from the \u0027userInputHandler\u0027.","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"ji-just-ji"},"content":" * 6. Constructs dialog boxes for both user and \u0027duke\u0027 (assuming \u0027user\u0027 and \u0027peko\u0027 are images).","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"ji-just-ji"},"content":" * 7. Adds the dialog boxes to the conversation view.","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"ji-just-ji"},"content":" * 8. Clears the user input field.","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":180,"author":{"gitId":"ji-just-ji"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":181,"author":{"gitId":"ji-just-ji"},"content":" String text \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":182,"author":{"gitId":"ji-just-ji"},"content":" userInputHandler.newInput(text);","lastModifiedDate":"2023-09-11"},{"lineNumber":183,"author":{"gitId":"ji-just-ji"},"content":" Label userText \u003d new Label(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Processing\");","lastModifiedDate":"2023-09-12"},{"lineNumber":185,"author":{"gitId":"ji-just-ji"},"content":" Label dukeText \u003d new Label(userInputHandler.getResponse());","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"ji-just-ji"},"content":" DialogBox userDB \u003d DialogBox.getUserDialog(userText, new ImageView(user));","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"ji-just-ji"},"content":" DialogBox pekoDB \u003d DialogBox.getPekoDialog(dukeText, new ImageView(peko));","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"ji-just-ji"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"ji-just-ji"},"content":" userDB,","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"ji-just-ji"},"content":" pekoDB","lastModifiedDate":"2023-09-08"},{"lineNumber":191,"author":{"gitId":"ji-just-ji"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":192,"author":{"gitId":"ji-just-ji"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":193,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ji-just-ji":196}},{"path":"src/main/java/peko/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"public class UI {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":6}},{"path":"src/main/java/peko/UserInputHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.TaskHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" * The `UserInputHandler` class manages user input for the Peko chat application. It reads and processes","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" * user commands, initializes a scanner to read input, and delegates command processing to the `TaskHandler`.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"public class UserInputHandler {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" private static final String introText \u003d \"Konpeko, Konpeko, Konpeko! \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" \"Hololive san kisei no\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" \"Usada Pekora-peko! almondo almondo!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" private static final String exitText \u003d \"Otsupeko! Bye bye!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private Commands command;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" private Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" * Constructor for the UserInputHandler class.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * Initializes a new instance of the StorageHandler class.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" public UserInputHandler() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" new StorageHandler();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * Reads and processes new user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * This method initializes a Scanner to read input from the console,","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" * parses the input using a Parser instance, and stores the resulting","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" * command and description for further processing.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" public void newInput() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" command \u003d parser.getResponseValue();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" description \u003d parser.getDescription();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" * Sets the user input for processing.","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * @param s The user input string to be processed.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" public void newInput(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" Parser parser \u003d new Parser(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" command \u003d parser.getResponseValue();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" description \u003d parser.getDescription();","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" * Gets the response generated based on the user input.","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" * @return The response generated for the user\u0027s command.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" TaskHandler taskHandler \u003d new TaskHandler(command, description);","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" return taskHandler.getResponse();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" * Processes the user input and executes the associated command.","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" * @return True if the application should continue, false if it should exit.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" public boolean processInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" TaskHandler taskHandler \u003d new TaskHandler(command, description);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" return taskHandler.run();","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":78}},{"path":"src/main/java/peko/commands/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" * The {@code Commands} enum represents various commands possible.","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"public enum Commands {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" ECHO,","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" OTSUPEKO,","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" LIST,","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" WRITE,","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" MARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" UNMARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" EVENT,","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" FIND,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" DELETE,","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" ARCHIVE,","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" COPYPASTA","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":24}},{"path":"src/main/java/peko/commands/Find.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The Find class is responsible for searching and displaying tasks based on a search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It retrieves tasks from a storage handler matching the search criteria and provides a method","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" * to display the results.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"public class Find {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private Task[] tempTaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private String searchQuery;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a Find object with a specific search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @param s the search query to search for tasks with.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" public Find(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Find: \" + s);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" if (s.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You\u0027re not searching for anything Peko?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" searchQuery \u003d s;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" tempTaskList \u003d new Task[100];","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" search();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" //display();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * Private method to search for tasks that match the provided search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * It populates the {@code tempTaskList} with matching tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" private void search() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" this.tempTaskList \u003d StorageHandler.search(searchQuery);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" * Displays the search results in a formatted string.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @return A string containing the formatted search results.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public String display() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" for (Task t : tempTaskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" if (t \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d t + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ji-just-ji":57}},{"path":"src/main/java/peko/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.exceptions;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":" * The InvalidTaskException is a custom exception class that is thrown when an invalid task","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" * is encountered in the application. This exception is for when the user tries to create a task","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" * that is not in the right format.","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" private String errorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" * Constructs an InvalidTaskException without a specific error message.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" public InvalidTaskException() {}","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * Constructs an {@code InvalidTaskException} with a specific error message.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * @param s The error message describing the issue with the invalid task.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" public InvalidTaskException(String s) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" this.errorMessage \u003d s;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" * Overrides the default toString method to provide a general error message when the","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" * exception is converted to a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" * @return A general error message indicating that the provided task is invalid.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" return \"That\u0027s Not a task BAKATARE!!!!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" * Provides a more detailed error message when the exception is converted to a string using","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" * this method. This includes the general error message along with the specific error message","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" * describing the issue with the invalid task.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * @return A detailed error message describing the issue with the invalid task.","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" public String errorToString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" return \"Something is wrong with this task peko.Peko!\\n\" + errorMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":47}},{"path":"src/main/java/peko/memory/ArchiveHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.memory;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import java.io.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * The ArchiveHandler class is responsible for managing the archival of tasks and retrieval of archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * It provides methods to archive tasks and load archived tasks from a file.","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" * Archived tasks are stored in a text file in a specific format.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * This class supports the storage and retrieval of various task types, such as Todos, Deadlines, and Events.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * Usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * - To archive a task, call the \u0027archive\u0027 method, providing the task to be archived.","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" * - To load archived tasks, use the \u0027fileManager\u0027 method to read and parse the archived task data.","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * - This class ensures that each task is archived only once.","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"public class ArchiveHandler {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" private static File file \u003d new File(\"src/main/Archive.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" private static PrintWriter printWriter;","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" private static ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" private static HashMap\u003cString, Boolean\u003e map \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" * Archives a task by storing it in the archive file.","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * This method takes a Task object, stores it in the archive file, and marks it as archived to prevent duplicate archiving.","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" * It performs the following steps:","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" * 1. Calls the \u0027fileManager\u0027 method to initialize the archive file and load existing archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" * 2. Prints the string representation of the task to the console.","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" * 3. Checks if the task has already been archived using its string representation as a key in the \u0027map\u0027 data structure.","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" * 4. If the task is not already archived, it converts the task to a string representation using \u0027toStore\u0027 method.","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" * 5. Appends the string representation to the archive file with a newline character.","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * @param task The Task object to be archived.","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" * @throws RuntimeException If there is an IOException while writing to the archive file.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" public static void archive(Task task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" fileManager();","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" if (!map.getOrDefault(task.toString(), false)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" String toStore \u003d task.toStore() + \"\\n\";","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" Writer temp;","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" temp \u003d new BufferedWriter(new FileWriter(\"src/main/Archive.txt\", true));","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" temp.append(toStore);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" temp.close();","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" throw new RuntimeException(ex);","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * Manages the archive file by initializing it and loading existing archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" * This method performs the following tasks:","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * 1. Checks if the archive file exists. If not, it creates a new file named \"List.txt\" in the same directory.","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" * 2. If the archive file exists, it reads its contents and parses them to recover archived tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" * 3. It uses a Scanner to read lines from the archive file, splitting each line into task data.","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" * 4. Converts the task data back to Task objects using the \u0027stringToTask\u0027 method.","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" * 5. If a valid Task is recovered, it adds it to the \u0027list\u0027 of archived tasks and marks it as archived in the \u0027map\u0027.","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" * @throws RuntimeException If there is an IOException while reading the archive file or if the archive file does not exist.","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" private static void fileManager() {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" File temp \u003d new File(file.getParentFile(), \"List.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" file \u003d temp;","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" Scanner scanner \u003d new Scanner(file.getAbsoluteFile());","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" String s \u003d scanner.nextLine();","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" String[] arr \u003d s.split(\" \\\\| \");","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d stringToTask(arr);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":" if (t !\u003d null \u0026\u0026 !map.getOrDefault(t.toString(), false)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" map.put(t.toString(), true);","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" list.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" * Converts an array of task data strings into a Task object.","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" * This method takes an array of strings containing task data and converts it into a Task object, which can be of type ToDos, Deadline, or Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" * The task data is expected to be in a specific format, and this method handles the conversion.","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" * @param arr An array of strings containing task data.","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" * @return A Task object representing the parsed task data, or null if the data is incomplete or invalid.","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task data represents an invalid task type.","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" * @throws IndexOutOfBoundsException If the task data array does not contain enough elements.","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" private static Task stringToTask(String[] arr) {","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" Task t;","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" switch (arr[0]) {","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" case \"T\":","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new ToDos( arr[2]);","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" case \"D\":","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Deadline(arr[2] + \" /by \" + arr[3]);","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" case \"E\":","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Event(arr[2] + \" /from \" + arr[3] + \" /to \" + arr[4]);","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Incomplete task an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" return null;","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" public static String readArchive() {","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" fileManager();","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" for(Task t : list) {","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d t.toString() + \"\\n\";","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":" return out \u003d\u003d \"\" ? \"Nani mo nai Peko\" : out;","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":156}},{"path":"src/main/java/peko/memory/SaveHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.memory;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"import java.io.*;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"public class SaveHandler {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private static int listSize \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" private static Task[] tasks \u003d new Task[100];","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" private static File file \u003d new File(\"src/main/List.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * Saves tasks to a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * This method clears the existing file content, then iterates through the task list,","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * converting each task to a line of tex and appending it to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * If the file is not found, a new file is created.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" public static void saveTo() {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(file.getAbsolutePath());","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" PrintWriter printWriter;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" printWriter \u003d new PrintWriter(file.getAbsoluteFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" printWriter.write(\"\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" printWriter.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" File temp \u003d new File(file.getParentFile(), \"List.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" file \u003d temp;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" } finally {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" if (t \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" String toStore \u003d t.toStore() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(\"toStore: \" + toStore);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" Writer temp;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" temp \u003d new BufferedWriter(new FileWriter(\"src/main/List.txt\", true));","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" temp.append(toStore);","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" temp.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" throw new RuntimeException(ex);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" * Loads tasks from a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * This method reads the content of the file, parses each line to create tasks,","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" * and populates the tasks array with the loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * @return An array of tasks loaded from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" public static Task[] loadFrom() {","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(file.getAbsolutePath());","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" int pos \u003d 0;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" Scanner scanner \u003d new Scanner(file.getAbsoluteFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" String s \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" String[] arr \u003d s.split(\" \\\\| \");","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d stringToTask(arr);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" if (t !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" tasks[pos] \u003d t;","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" pos++;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" listSize \u003d pos;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" } catch (Exception e){","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" return tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" * Converts a string array to a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" * This method takes a string array containing task details and converts it into a Task object,","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" * handling various task types (ToDos, Deadlines, and Events) and marking done as needed.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" * @param arr The string array containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" * @return A Task object created from the provided string array, or null if parsing fails.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" private static Task stringToTask(String[] arr) {","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":" Task t;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" switch (arr[0]) {","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" case \"T\":","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new ToDos( arr[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" case \"D\":","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Deadline(arr[2] + \" /by \" + arr[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" case \"E\":","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" t \u003d new Event(arr[2] + \" /from \" + arr[3] + \" /to \" + arr[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" if (arr[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" t.setMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" return t;","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Incomplete task an error in the list, Pain peko, I\u0027ll delete it\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" return null;","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" public static int size() {","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" return listSize;","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":145}},{"path":"src/main/java/peko/memory/StorageHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.memory;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" * The StorageHandler class is responsible for managing the storage and retrieval of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" * It interacts with the `SaveHandler` class to load and save tasks from/to a text file. This class","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" * also provides methods for adding, marking, unmarking, searching, and deleting tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"public class StorageHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" private static Task[] todoList;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" private static int size;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * Constructor for the StorageHandler class.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" * Initializes the todoList by loading tasks from a txt file using SaveHandler","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" * and stores the size of the stored list.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" public StorageHandler() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" todoList \u003d SaveHandler.loadFrom();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" size \u003d SaveHandler.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" * Reads the array of tasks and formats them as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string containing the tasks in the list.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" public static String readArray() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"--------------LIST-PEKO------------------\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" while (todoList[i] !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (i+1 + \". \" + todoList[i] + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" if (i \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"You are FREE PEKO!!!!!\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" * Adds a task to the array of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * @param t The task to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" * @return A message indicating the task was added successfully.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" public static String addToArray(Task t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" todoList[size] \u003d t;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"Added: \\n \" + todoList[size].toString() + \"\\npeko!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d \"You have: \" + (size+1) + \" tasks now peko\";","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" size++;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * Marks a task as done in the array of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" * @param i The index of the task to be marked as done (1-based).","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * @return A message indicating the task was marked as done successfully.","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" public static String setMarkArray(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" String out;","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" todoList[i-1].setMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" out \u003d \"Marked as done peko!\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (\" \" + todoList[i-1] + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"You don\u0027t have so many Tasks Peko!\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" * Unmarks a task as done in the array of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" * @param i The index of the task to be unmarked as done (1-based).","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":" * @return A message indicating the task was unmarked as done successfully.","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" public static String setUnmarkArray(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" todoList[i-1].setUnmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (\"You haven\u0027t done this yet peko?!\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d (\" \" + todoList[i-1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"You don\u0027t have so many Tasks Peko!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" * Searches for tasks in the array of tasks that match a search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" * @param searchQuery The search query used to match tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" * @return An array of tasks that match the search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" public static Task[] search(String searchQuery) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" Task[] temp \u003d todoList;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" Task[] tempOutput \u003d new Task[100];","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" int pos \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" for (Task t : temp) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":" if (t \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"break\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" if (t.hasString(searchQuery)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" tempOutput[pos] \u003d t;","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" pos++;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" return tempOutput;","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":" * Deletes a task from the todoList array.","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" * This method removes the task at the specified index by shifting subsequent tasks up,","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" * updates the size counter, and saves the updated task list using SaveHandler.","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":" * @param i The index of the task to be deleted (1-based).","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" public static void setDelete(int i) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" i--;","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" while (i \u003c\u003d size) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" todoList[i] \u003d todoList[i+1];","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" todoList[i] \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" size--;","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" * Reads and returns a text file containing copypasta text.","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":" * @return The copypasta text read from the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" * @throws FileNotFoundException If the file is not found.","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" public static String degen() throws FileNotFoundException {","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":" File text \u003d new File(\"src/main/Copypasta.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":" Scanner sc \u003d new Scanner(text);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":" String temp \u003d (sc.nextLine() + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"ji-just-ji"},"content":" out +\u003d temp;","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"ji-just-ji"},"content":" public static String archive(int i) {","lastModifiedDate":"2023-09-15"},{"lineNumber":163,"author":{"gitId":"ji-just-ji"},"content":" if (i \u003e\u003d size) {","lastModifiedDate":"2023-09-15"},{"lineNumber":164,"author":{"gitId":"ji-just-ji"},"content":" return \"You don\u0027t have that Task Peko\";","lastModifiedDate":"2023-09-15"},{"lineNumber":165,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":166,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d todoList[i-1];","lastModifiedDate":"2023-09-15"},{"lineNumber":167,"author":{"gitId":"ji-just-ji"},"content":" ArchiveHandler.archive(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":168,"author":{"gitId":"ji-just-ji"},"content":" setDelete(i);","lastModifiedDate":"2023-09-15"},{"lineNumber":169,"author":{"gitId":"ji-just-ji"},"content":" return \"I have Archived the task Peko!\";","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ji-just-ji":172}},{"path":"src/main/java/peko/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.DateTimeHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * The Deadline class represents a task with a deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" * It extends the Task class and includes additional functionality for handling deadlines.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" char type \u003d \u0027D\u0027;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" DateTimeHandler dateTimeHandler;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a Deadline object with the specified description.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the deadline task, including the task name and deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the provided description is invalid or missing essential parts.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" public Deadline(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" String[] split \u003d s.split(\" /by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s no deadline peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" } else if (split.length \u003e\u003d 3){","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You can\u0027t have two deadlines peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" String[] temp \u003d split[0].split(\" \",2);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" //System.out.println(Arrays.toString(temp));","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d split[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(split[0]);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" dateTimeHandler \u003d new DateTimeHandler(split[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * Converts the Deadline object to a formatted string representation.","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representing the deadline task, including its type, status,","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" * task name, and deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" return \"[\" + type + \"]\" + super.toString() + \" (by: \" + dateTimeHandler.stringDisplay() + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" * Converts the Deadline object to a string for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the deadline task suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" String state \u003d this.status ? \"0\" : \"1\";","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" String output \u003d \"D\" + \" | \" + state + \" | \" + this.name + \" | \" + dateTimeHandler.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof Deadline) {","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" return this.name.equals(((Deadline) o).name) \u0026\u0026 dateTimeHandler.equals(((Deadline) o).dateTimeHandler);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":69}},{"path":"src/main/java/peko/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.DateTimeHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The Event class represents a task that spans a period, starting and ending at specific times.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It extends the Task class and includes additional functionality for handling events.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" private char type \u003d \u0027E\u0027;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" private DateTimeHandler startHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" private DateTimeHandler endHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" * Constructs an Event object with the specified description.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the event task, including the task name, start time, and end time.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the provided description is invalid or missing essential parts.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" public Event(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" String[] split \u003d s.split(\" /from \");","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s no start date peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" } else if (split.length \u003e\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You can\u0027t have two start dates peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" split[0].split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d split[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" split \u003d split[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"There\u0027s no end date peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" } else if (split.length \u003e\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"You can\u0027t have two end dates peko!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" startHandler \u003d new DateTimeHandler(split[0]);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" endHandler \u003d new DateTimeHandler(split[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" * Converts the {@code Event} object to a formatted string representation.","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representing the event task, including its type, status,","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * task name, start time, and end time.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" return \"[\" + type + \"]\" + super.toString() + \" (from: \" + startHandler.stringDisplay()","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" + \" to: \" + endHandler.stringDisplay() + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" * Converts the {@code Event} object to a string for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the event task suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" String curr \u003d this.status ? \"0\" : \"1\";","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" return \"E\" + \" | \" + curr + \" | \" + this.name + \" | \" + startHandler.toString() + \" | \" + endHandler.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" private boolean equalDateTimeChecker(DateTimeHandler d1, DateTimeHandler d2) {","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" return d1.equals(d2);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof Event) {","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" return name.equals(((Event) o).name) \u0026\u0026 equalDateTimeChecker(((Event) o).startHandler, startHandler)","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" \u0026\u0026 equalDateTimeChecker(((Event) o).endHandler, endHandler);","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":78}},{"path":"src/main/java/peko/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * The Task class represents a basic task with a name and a completion status.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * It serves as the base class for various task types, such as ToDos, Deadlines, and Events.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" protected String tag;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" protected String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" protected boolean status;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a Task object with the specified name.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" * @param s The name of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the provided name is blank or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" public Task(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" if (s.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d s;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" * Returns a formatted string representation of the task, including its completion status and name.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representing the task, with a checkbox indicating completion status.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d status ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" return out + name;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" * Marks the task as completed by setting its completion status to true.","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" public void setMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" status \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" * Unmarks the task as completed by setting its completion status to false.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" public void setUnmark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" * Checks if the task\u0027s name contains a specific string.","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" * @param s The string to search for in the task\u0027s name.","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":" * @return True if the task\u0027s name contains the specified string; otherwise, false.","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" public boolean hasString(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" return name.contains(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" * Converts the task object to a string for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the task suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" String state \u003d status ? \"0\" : \"1\";","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":" return state + \" | \" + this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" return this.status;","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof Task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" return this.name.equals(((Task) o).name);","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ji-just-ji":84}},{"path":"src/main/java/peko/tasks/TaskHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.commands.Find;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.ArchiveHandler;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.SaveHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.StorageHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" * The TaskHandler class is responsible for processing user commands related to task management","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * and generating appropriate responses or actions.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"public class TaskHandler {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" private static final String lineBreak \u003d \"------------------------------------------\"; //42","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" private Commands command;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a TaskHandler object with the specified user command and description.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" * @param description The description or additional input associated with the command.","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" public TaskHandler(Commands command, String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" * Echos back the user\u0027s input or displays a message if the input is blank.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" * @return The echoed user input or a message.","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" private String echo() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" String out;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" out \u003d \"You didn\u0027t say anything peko?\";","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" out \u003d description;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ji-just-ji"},"content":" * Reads and retrieves a list of tasks as a formatted string.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string containing the list of tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"ji-just-ji"},"content":" private String readArray() {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"ji-just-ji"},"content":" return StorageHandler.readArray() + lineBreak;","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new task with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"ji-just-ji"},"content":" private String addToArray() throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new Task(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"ji-just-ji"},"content":" * Marks a task as done based on the provided task index.","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"ji-just-ji"},"content":" * @param s The index of the task to be marked as done (as a string).","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the task has been marked as done.","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"ji-just-ji"},"content":" * @throws NumberFormatException If the provided index is not a valid number.","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"ji-just-ji"},"content":" private String mark(String s) throws NumberFormatException{","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.setMarkArray(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"ji-just-ji"},"content":" * Unmarks a task as done based on the provided task index.","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"ji-just-ji"},"content":" * @param s The index of the task to be unmarked (as a string).","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the task has been unmarked.","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"ji-just-ji"},"content":" * @throws NumberFormatException If the provided index is not a valid number.","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"ji-just-ji"},"content":" private String unmark(String s) throws NumberFormatException{","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.setUnmarkArray(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new task of the specified type with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"ji-just-ji"},"content":" private String todo(String s) throws InvalidTaskException{","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new ToDos(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new deadline task with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the deadline task.","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"ji-just-ji"},"content":" private String deadline(String s) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new Deadline(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"ji-just-ji"},"content":" * Adds a new event task with the provided description to the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the addition of the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the task description is invalid or empty.","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"ji-just-ji"},"content":" private String Event(String s) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new Event(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d StorageHandler.addToArray(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"ji-just-ji"},"content":" * Finds and displays tasks that match the provided search query.","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"ji-just-ji"},"content":" * @param s The search query used to filter tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string containing the matching tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"ji-just-ji"},"content":" private String Find(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"ji-just-ji"},"content":" Find find \u003d new Find(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d find.display();","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"ji-just-ji"},"content":" * Deletes a task from the task list based on the provided task index.","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":159,"author":{"gitId":"ji-just-ji"},"content":" * @param s The index of the task to be deleted (as a string).","lastModifiedDate":"2023-09-12"},{"lineNumber":160,"author":{"gitId":"ji-just-ji"},"content":" * @return A message confirming the deletion of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":161,"author":{"gitId":"ji-just-ji"},"content":" * @throws NumberFormatException If the provided index is not a valid number.","lastModifiedDate":"2023-09-12"},{"lineNumber":162,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"ji-just-ji"},"content":" public String delete(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"ji-just-ji"},"content":" StorageHandler.setDelete(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"I have deleted the task Peko\";","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"ji-just-ji"},"content":" public String archive(String s) {","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"ji-just-ji"},"content":" if (s.isBlank()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d ArchiveHandler.readArchive();","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"ji-just-ji"},"content":" int i \u003d Integer.parseInt(s);","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"ji-just-ji"},"content":" return StorageHandler.archive(i);","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":180,"author":{"gitId":"ji-just-ji"},"content":" * Processes the user command, performs corresponding actions, and returns a response.","lastModifiedDate":"2023-09-12"},{"lineNumber":181,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"ji-just-ji"},"content":" * @return A response message based on the executed command.","lastModifiedDate":"2023-09-12"},{"lineNumber":183,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"ji-just-ji"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-08"},{"lineNumber":185,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"ji-just-ji"},"content":" String out \u003d \"Gomen Peko I don\u0027t understand\";","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"ji-just-ji"},"content":" ;","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"ji-just-ji"},"content":" switch (command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":191,"author":{"gitId":"ji-just-ji"},"content":" case ECHO:","lastModifiedDate":"2023-09-08"},{"lineNumber":192,"author":{"gitId":"ji-just-ji"},"content":" out \u003d echo();","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":194,"author":{"gitId":"ji-just-ji"},"content":" case LIST:","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"ji-just-ji"},"content":" out \u003d readArray();","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"ji-just-ji"},"content":" case WRITE:","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"ji-just-ji"},"content":" out \u003d addToArray();","lastModifiedDate":"2023-09-11"},{"lineNumber":199,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":200,"author":{"gitId":"ji-just-ji"},"content":" case MARK:","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"ji-just-ji"},"content":" out \u003d mark(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"ji-just-ji"},"content":" case UNMARK:","lastModifiedDate":"2023-09-08"},{"lineNumber":204,"author":{"gitId":"ji-just-ji"},"content":" out \u003d unmark(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"ji-just-ji"},"content":" case TODO:","lastModifiedDate":"2023-09-08"},{"lineNumber":207,"author":{"gitId":"ji-just-ji"},"content":" out \u003d todo(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"ji-just-ji"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-08"},{"lineNumber":210,"author":{"gitId":"ji-just-ji"},"content":" out \u003d deadline(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"ji-just-ji"},"content":" case EVENT:","lastModifiedDate":"2023-09-08"},{"lineNumber":213,"author":{"gitId":"ji-just-ji"},"content":" out \u003d Event(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":215,"author":{"gitId":"ji-just-ji"},"content":" case FIND:","lastModifiedDate":"2023-09-08"},{"lineNumber":216,"author":{"gitId":"ji-just-ji"},"content":" out \u003d Find(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":217,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":218,"author":{"gitId":"ji-just-ji"},"content":" case DELETE:","lastModifiedDate":"2023-09-08"},{"lineNumber":219,"author":{"gitId":"ji-just-ji"},"content":" out \u003d delete(description);","lastModifiedDate":"2023-09-11"},{"lineNumber":220,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":221,"author":{"gitId":"ji-just-ji"},"content":" case ARCHIVE:","lastModifiedDate":"2023-09-15"},{"lineNumber":222,"author":{"gitId":"ji-just-ji"},"content":" out \u003d archive(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":223,"author":{"gitId":"ji-just-ji"},"content":" break;","lastModifiedDate":"2023-09-15"},{"lineNumber":224,"author":{"gitId":"ji-just-ji"},"content":" case COPYPASTA:","lastModifiedDate":"2023-09-08"},{"lineNumber":225,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":226,"author":{"gitId":"ji-just-ji"},"content":" return StorageHandler.degen();","lastModifiedDate":"2023-09-08"},{"lineNumber":227,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":228,"author":{"gitId":"ji-just-ji"},"content":" return \"Hentai!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":229,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":230,"author":{"gitId":"ji-just-ji"},"content":" } finally {","lastModifiedDate":"2023-09-08"},{"lineNumber":231,"author":{"gitId":"ji-just-ji"},"content":" return \"Something Went Wrong Peko....\";","lastModifiedDate":"2023-09-08"},{"lineNumber":232,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":233,"author":{"gitId":"ji-just-ji"},"content":" case OTSUPEKO:","lastModifiedDate":"2023-09-08"},{"lineNumber":234,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-09-08"},{"lineNumber":235,"author":{"gitId":"ji-just-ji"},"content":" return \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":236,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":237,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-11"},{"lineNumber":238,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-11"},{"lineNumber":239,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":240,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":241,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":242,"author":{"gitId":"ji-just-ji"},"content":" return e.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":243,"author":{"gitId":"ji-just-ji"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":244,"author":{"gitId":"ji-just-ji"},"content":" out \u003d (\"That\u0027s not a number Bakatare!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":245,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":246,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-08"},{"lineNumber":247,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":248,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-11"},{"lineNumber":249,"author":{"gitId":"ji-just-ji"},"content":" return out;","lastModifiedDate":"2023-09-11"},{"lineNumber":250,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":251,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":252,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":253,"author":{"gitId":"ji-just-ji"},"content":" * Executes the user command, performs corresponding actions, and returns whether the program should continue running.","lastModifiedDate":"2023-09-12"},{"lineNumber":254,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":255,"author":{"gitId":"ji-just-ji"},"content":" * @return True if the program should continue running; false if it should exit.","lastModifiedDate":"2023-09-12"},{"lineNumber":256,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":257,"author":{"gitId":"ji-just-ji"},"content":" public boolean run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":258,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"ji-just-ji"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":261,"author":{"gitId":"ji-just-ji"},"content":" case ECHO:","lastModifiedDate":"2023-08-28"},{"lineNumber":262,"author":{"gitId":"ji-just-ji"},"content":" echo();","lastModifiedDate":"2023-08-28"},{"lineNumber":263,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":264,"author":{"gitId":"ji-just-ji"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":265,"author":{"gitId":"ji-just-ji"},"content":" readArray();","lastModifiedDate":"2023-08-28"},{"lineNumber":266,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":267,"author":{"gitId":"ji-just-ji"},"content":" case WRITE:","lastModifiedDate":"2023-08-28"},{"lineNumber":268,"author":{"gitId":"ji-just-ji"},"content":" addToArray();","lastModifiedDate":"2023-08-28"},{"lineNumber":269,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":270,"author":{"gitId":"ji-just-ji"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":271,"author":{"gitId":"ji-just-ji"},"content":" mark(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":272,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":273,"author":{"gitId":"ji-just-ji"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":274,"author":{"gitId":"ji-just-ji"},"content":" unmark(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":275,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":276,"author":{"gitId":"ji-just-ji"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":277,"author":{"gitId":"ji-just-ji"},"content":" todo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":278,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":279,"author":{"gitId":"ji-just-ji"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":280,"author":{"gitId":"ji-just-ji"},"content":" deadline(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":281,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":282,"author":{"gitId":"ji-just-ji"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":283,"author":{"gitId":"ji-just-ji"},"content":" Event(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":284,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":285,"author":{"gitId":"ji-just-ji"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"ji-just-ji"},"content":" Find(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"ji-just-ji"},"content":" case DELETE:","lastModifiedDate":"2023-08-28"},{"lineNumber":289,"author":{"gitId":"ji-just-ji"},"content":" delete(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":290,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":291,"author":{"gitId":"ji-just-ji"},"content":" case ARCHIVE:","lastModifiedDate":"2023-09-15"},{"lineNumber":292,"author":{"gitId":"ji-just-ji"},"content":" archive(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":293,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":294,"author":{"gitId":"ji-just-ji"},"content":" case COPYPASTA:","lastModifiedDate":"2023-08-28"},{"lineNumber":295,"author":{"gitId":"ji-just-ji"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":296,"author":{"gitId":"ji-just-ji"},"content":" StorageHandler.degen();","lastModifiedDate":"2023-08-28"},{"lineNumber":297,"author":{"gitId":"ji-just-ji"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":298,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"Hentai!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":299,"author":{"gitId":"ji-just-ji"},"content":" } finally {","lastModifiedDate":"2023-08-28"},{"lineNumber":300,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":301,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":302,"author":{"gitId":"ji-just-ji"},"content":" case OTSUPEKO:","lastModifiedDate":"2023-08-28"},{"lineNumber":303,"author":{"gitId":"ji-just-ji"},"content":" SaveHandler.saveTo();","lastModifiedDate":"2023-08-28"},{"lineNumber":304,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":305,"author":{"gitId":"ji-just-ji"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":306,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":307,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":308,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":309,"author":{"gitId":"ji-just-ji"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":310,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":311,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":312,"author":{"gitId":"ji-just-ji"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":313,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(\"That\u0027s not a number Bakatare!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":314,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":315,"author":{"gitId":"ji-just-ji"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":316,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":317,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":318,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":318}},{"path":"src/main/java/peko/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" * Represents a \"To-Do\" task.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" * A \"To-Do\" task is a simple task without a specific deadline or event time.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" char type \u003d \u0027T\u0027;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" * Constructs a \"To-Do\" task with the specified description.","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" * @param s The description of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" * @throws InvalidTaskException If the description is empty or invalid.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" public ToDos(String s) throws InvalidTaskException {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" this.name \u003d s;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":" * Returns a string representation of the \"To-Do\" task.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ji-just-ji"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ji-just-ji"},"content":" return \"[\" + type + \"]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ji-just-ji"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ji-just-ji"},"content":" * Converts the \"To-Do\" task to a string suitable for storage in a text file.","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ji-just-ji"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ji-just-ji"},"content":" * @return A formatted string representation of the task for storage.","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ji-just-ji"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ji-just-ji"},"content":" public String toStore() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ji-just-ji"},"content":" String state \u003d status ? \"0\" : \"1\";","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ji-just-ji"},"content":" return \"T\" + \" | \" + state + \" | \" + this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ji-just-ji"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ji-just-ji"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ji-just-ji"},"content":" if (o instanceof ToDos) {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ji-just-ji"},"content":" return this.name.equals(((ToDos) o).name);","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"ji-just-ji"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ji-just-ji":51}},{"path":"src/test/java/peko/ArchiveHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import peko.memory.*;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"public class ArchiveHandlerTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" public void storeTest() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" Task t \u003d new ToDos(\"ye\");","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" ArchiveHandler.archive(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":15}},{"path":"src/test/java/peko/DateTimeHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"public class DateTimeHandlerTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":" assertEquals(2,2);","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" public void testValidInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" String s \u003d \"19/11/2001 1023\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" String target \u003d \"NOVEMBER 19 2001 10:23\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" assertEquals(target, (new DateTimeHandler(s)).stringDisplay());","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ji-just-ji":18}},{"path":"src/test/java/peko/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" public void testString() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" Deadline deadline \u003d new Deadline(\"return book /by 28/2/2100 2359\");","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" String correct \u003d \"[D][ ] return book (by: February 28 2100 23:59)\";","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" //assert deadline.toString().equals(correct);","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" public void testString2() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" Deadline deadline \u003d new Deadline(\"read /by 12/2/2200 0000\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" String correct \u003d \"[D][ ] read (by: February 12 2200 00:00)\";","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" //assert deadline.toString().equals(correct);","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":22}},{"path":"src/test/java/peko/EventHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"public class EventHandlerTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" public void sameTaskTest() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" Event e1 \u003d new Event(\"Book /from 2/2/2020 1920 /to 3/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" Event e2 \u003d new Event(\"Book /from 2/2/2020 1920 /to 3/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" assert e1.equals(e2);","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" public void sameTaskTest3() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" Event e1 \u003d new Event(\"Book /from 2/2/2020 1920 /to 3/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" Event e2 \u003d new Event(\"Book /from 2/2/2020 1920 /to 4/2/2020 1920\");","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" assert !e1.equals(e2);","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":21}},{"path":"src/test/java/peko/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"package peko;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ji-just-ji"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ji-just-ji"},"content":"import peko.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ji-just-ji"},"content":"import peko.tasks.ToDos;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ji-just-ji"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"ji-just-ji"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ji-just-ji"},"content":" public void testMarkAsDone() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ji-just-ji"},"content":" ToDos todo \u003d new ToDos(\"return book\");","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ji-just-ji"},"content":" assert !todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"ji-just-ji"},"content":" todo.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"ji-just-ji"},"content":" assert todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ji-just-ji"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"ji-just-ji"},"content":" public void testMarkAsUnDone() throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"ji-just-ji"},"content":" ToDos todo \u003d new ToDos(\"return book\");","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ji-just-ji"},"content":" assert !todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"ji-just-ji"},"content":" todo.setMark();","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"ji-just-ji"},"content":" assert todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ji-just-ji"},"content":" todo.setUnmark();","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"ji-just-ji"},"content":" assert !todo.getStatus();","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ji-just-ji"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"ji-just-ji"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"ji-just-ji"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ji-just-ji":27}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ji-just-ji"},"content":"otsupeko","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ji-just-ji":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"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":"ji-just-ji"},"content":"java -classpath ..\\bin Peko \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":{"ji-just-ji":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":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"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":"ji-just-ji"},"content":"java -classpath ../bin Peko \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"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":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ji-just-ji":1,"-":37}}] diff --git a/ji-just-ji_ip_master/commits.json b/ji-just-ji_ip_master/commits.json index 2f756f75..500717bb 100644 --- a/ji-just-ji_ip_master/commits.json +++ b/ji-just-ji_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ji-just-ji":[{"date":"2023-08-21","commitResults":[{"hash":"0471a8b1de55861cd1b37097f71de31d7ed7c485","isMergeCommit":false,"messageTitle":"Level 0 Initialize Change name to Peko Add intro and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"e770b5c127f79ebe97c2899da37b8ab33259f01a","isMergeCommit":false,"messageTitle":"Fixed intro logo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5f577f6370707e6d86a4a8383d5f41cd73b4977d","isMergeCommit":false,"messageTitle":"Level-1 Add echo functionality Move introduction into separate function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":29,"deletions":4}}},{"hash":"9c9f2b7e1488233c80dd17080b35667ac2b26863","isMergeCommit":false,"messageTitle":"Add loop for echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"8f232707645f4b3ed98d34c6f425c0b25ff9594e","isMergeCommit":false,"messageTitle":"Move final variables together","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"020f1bf55a8a865f9f096134575fb52a09392e8e","isMergeCommit":false,"messageTitle":"Remove unneeded intitalizations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"4f07bd284eff2e550a03508724e40d03d2df0d76","isMergeCommit":false,"messageTitle":"Add Copypasta text Add easteregg","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":28,"deletions":1}}},{"hash":"6610889dbd406259c0ebf241ecee4a235946c223","isMergeCommit":false,"messageTitle":"Update Copypasta text","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4}}},{"hash":"598b96079f92e61f1c3ecbca1005d6388bacb690","isMergeCommit":false,"messageTitle":"Updated Copypasta text","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"7368d15de0fe5c59e8d2d59313ff821ef1ebe885","isMergeCommit":false,"messageTitle":"Added read and write capability","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":44,"deletions":3}}},{"hash":"028406cf7ce6ae3d13a4f8cc38c20fcade2af3e8","isMergeCommit":false,"messageTitle":"Modify input checking Make echo its own function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":36,"deletions":23}}},{"hash":"89f03cd1fa34306e638015819d9e23bb14054a42","isMergeCommit":false,"messageTitle":"Fix write input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":13,"deletions":12}}}]},{"date":"2023-08-23","commitResults":[{"hash":"883b632645304c85d9b5b16c816e941454d252c9","isMergeCommit":false,"messageTitle":"Change to array to store to do list Fix other functions to work with array","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":67,"deletions":14}}},{"hash":"606fbe35617b9f751ab5fad76317a520bd064181","isMergeCommit":false,"messageTitle":"Add Task object Move tasks into Task object","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c6637b7b74cc6f5a2b2656bae2adfafec6ce0da4","isMergeCommit":false,"messageTitle":"Add ToDo Deadline Event objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e4977984a4cf010b5039d3afd4b3f5dceca0c905","isMergeCommit":false,"messageTitle":"Add deadline timing capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":8}}},{"hash":"fc492bb82cc46a5109ba67595da4981f3338d9ec","isMergeCommit":false,"messageTitle":"Add deadline check","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":8}}},{"hash":"7910f014d74b3336e4a15ff0ee89ade829dfb8b2","isMergeCommit":false,"messageTitle":"Add InvalidTaskException to handle non task input Update Task ToDos Deadline Event to throw InvalidTaskException","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":17}}},{"hash":"e5170f3028214645e9287ebeb689349652e882d0","isMergeCommit":false,"messageTitle":"Change Expected.txt header","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"7ff0c26ef4af06bf79e52626fb5786f2d96d591b","isMergeCommit":false,"messageTitle":"Setup automated text U/I testing Add","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":13},"bat":{"insertions":3,"deletions":3},"sh":{"insertions":5,"deletions":5}}},{"hash":"ce6048a0314ab4b4abcf8c0f66fe777230e86f0e","isMergeCommit":false,"messageTitle":"Fix task bugs Fix automated test U/I testing bugs","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":46,"deletions":20},"bat":{"insertions":1,"deletions":1}}},{"hash":"885bb01844c90734668ced7ab3d5233a3cf6c45f","isMergeCommit":false,"messageTitle":"Fix runtest.sh changes","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":5,"deletions":5}}},{"hash":"ddefca37e237b440c2c395e4ad6253d664528a38","isMergeCommit":false,"messageTitle":"Update List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":16}}},{"hash":"2b21d3b4c30b9582d3ccd34192099da6bd79cacb","isMergeCommit":false,"messageTitle":"Save attempt 1 Add SaveHandler","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":143,"deletions":22}}},{"hash":"5dccc93fe84d45b89df19664582ea067ba313246","isMergeCommit":false,"messageTitle":"Save attempt 1 cont","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":38,"deletions":48}}},{"hash":"317b8a14e6c497d67eceaee57fdd96bfcf65179b","isMergeCommit":false,"messageTitle":"Add save and load into List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":59,"deletions":2}}},{"hash":"a13243853632a01629b44be81d80efd5178c2983","isMergeCommit":false,"messageTitle":"Remove unused methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":70}}},{"hash":"f79dd229a305b99ceb3b5398559d179e449e3fe6","isMergeCommit":false,"messageTitle":"Update List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":16}}},{"hash":"060ec5c90e4a4cde81df5be3ab167f2e4feea2fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027Save_(Level-7)\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"4558c652786fd19f99472f63a613fd1bde9f6712","isMergeCommit":false,"messageTitle":"Made to save upon every update","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"15ac47939c521869e6d81abbf76b0141cebf4b9f","isMergeCommit":false,"messageTitle":"Add datetime functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":47,"deletions":10}}},{"hash":"b2ffa572766bc0eabba7fdf80349764a3348f02d","isMergeCommit":false,"messageTitle":"Begin UIHandling","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":24,"deletions":0}}},{"hash":"27fc4597488afde8e0a5d457d72815341ece8e48","isMergeCommit":false,"messageTitle":"More UIHandling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}}]},{"date":"2023-08-25","commitResults":[{"hash":"3d253605d629ff3a57daf55afa534975bb3344ad","isMergeCommit":false,"messageTitle":"Add echo and readArray","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"1085a528b6b2c47a3771f915dc2853ae8c6d6478","isMergeCommit":false,"messageTitle":"Add mark and unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":28}}},{"hash":"679a796bc7b3d48c924dab4e305e8bc025d65509","isMergeCommit":false,"messageTitle":"Add todo deadline event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":58}}},{"hash":"75d0f4c7082ec859a0b430407d53c6cdaf66f1e6","isMergeCommit":false,"messageTitle":"UI handling draft1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":93}}},{"hash":"d2cc9f7cef855006c6fba1a00caac07ce146b674","isMergeCommit":false,"messageTitle":"UI handling Still has missing line breaks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":24,"deletions":89}}},{"hash":"19a78cd267d9e0c7f0b464be6ad4c82e12472b60","isMergeCommit":false,"messageTitle":"UI Handling bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":3}}},{"hash":"12a9187a7ed4901916c13165d0d4bf3f52fd7dec","isMergeCommit":false,"messageTitle":"Fix easter egg","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":4,"deletions":0}}},{"hash":"070fdb594644cac2f737ec6b203801ecfb3df12f","isMergeCommit":false,"messageTitle":"Begin StorageHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":94}}},{"hash":"eeb50cdf62b453faf533dea868256d65124ab5ba","isMergeCommit":false,"messageTitle":"Fix some StorageHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":29}}},{"hash":"547f94eb113e2e87c39b1501ab6838acb46b100e","isMergeCommit":false,"messageTitle":"Make StorageHandler static","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":10,"deletions":15}}}]},{"date":"2023-08-27","commitResults":[{"hash":"8be7de99504fbacf69b2cb23b39988708aaef85e","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":34,"deletions":21}}},{"hash":"5e7c9ed7feb4b48a3e24b8fbc45348d4af1fd0ea","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"d0b4c9f2c91e305402c4e2c29ed8bdc8c94672ce","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":17,"deletions":11}}},{"hash":"53100c119f9984ab1b01fb6fc59fccfe10bd21ef","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":34,"deletions":32}}},{"hash":"2a7bf79b262e1944418310ac757e88f19b7b9650","isMergeCommit":false,"messageTitle":"Move things around Add Parser UI TaskHandler Moved Enum out","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":237,"deletions":186}}},{"hash":"578bca4360f4835265bd550fe6b53068bed89047","isMergeCommit":false,"messageTitle":"Change StorageHandler to static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}},{"hash":"2152c073c45a5926f80ad514e0ac890ae0906409","isMergeCommit":false,"messageTitle":"Fix TaskHandler string name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"1d4143a6ac91fad35d925ed5c42c9616f20ed4b3","isMergeCommit":false,"messageTitle":"Update List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2}}},{"hash":"174f665f6c84c4535482df11aa716a6bae002032","isMergeCommit":true,"messageTitle":"Merge branch \u0027StorageHandler\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"45d0c24e6f3bb0929a2957c830a207f995669014","isMergeCommit":false,"messageTitle":"Move to all to peko package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":11}}},{"hash":"7e170140e8366bac4811338f59779b6446f54b3f","isMergeCommit":false,"messageTitle":"Bug fix","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":99}}}]},{"date":"2023-08-30","commitResults":[{"hash":"968913c3329477f4d323dc6c410d766aac5da163","isMergeCommit":false,"messageTitle":"Revert \"Bug fix\"","messageBody":"This reverts commit 7e170140e8366bac4811338f59779b6446f54b3f.\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":0}}},{"hash":"0c4aa0b009ed7e4051ec43687625ee51229351b4","isMergeCommit":false,"messageTitle":"Revert \"Move to all to peko package\"","messageBody":"This reverts commit 45d0c24e6f3bb0929a2957c830a207f995669014.\n","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":150}}},{"hash":"86e6be056807c9020b7e9de87374b5be6a0c167a","isMergeCommit":false,"messageTitle":"Move to peko package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":29}}},{"hash":"d414291c1fadf703950abb87760dec8b14295155","isMergeCommit":false,"messageTitle":"Add autosave after every command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"76d9bc0831bab0b3257552f9ab547c84bea89f2d","isMergeCommit":false,"messageTitle":"Revert \"Add autosave after every command\"","messageBody":"This reverts commit d414291c1fadf703950abb87760dec8b14295155.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4c04e14e1ff432b97c222aca2ea09f5cc76022d3","isMergeCommit":false,"messageTitle":"Revert \"Move to peko package\"","messageBody":"This reverts commit 86e6be056807c9020b7e9de87374b5be6a0c167a.\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":49}}},{"hash":"5f578e281122925a079159bb04594a7970217400","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":11}}},{"hash":"6a4808ab85766a642ae02dc41e297b14f1952e94","isMergeCommit":false,"messageTitle":"Fix not writing to List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":17,"deletions":20}}},{"hash":"4a17fb0d32ca9c9327495bb58864547e95221660","isMergeCommit":false,"messageTitle":"Add build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0}}},{"hash":"1e85a4b2faeff9bc08340d2ae52e65f0db1ecdbe","isMergeCommit":false,"messageTitle":"Add PekoTest for junit test","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":9,"deletions":2}}},{"hash":"513a1613ba276b6b74af49c783b9d33ba0b25e55","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradel-support-ji-just-ji\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"8fdc9a70956f02c4ea1d2625bbcf620704cfef0e","isMergeCommit":false,"messageTitle":"Add JavaDoc for Peko class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"797634259fc4de0521853cf035f7377f778bfe35","isMergeCommit":false,"messageTitle":"Add JavaDoc for UserInputHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"7396a57d21773ae7f7763e5256fd05fd08205fd6","isMergeCommit":false,"messageTitle":"Add JavaDoc for StorageHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":0}}},{"hash":"6a6a5f5e0c6b044530ff46fed108203cf16ef28e","isMergeCommit":false,"messageTitle":"Add JavaDoc for SaveHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":4}}},{"hash":"88c82c7e3bdd4c5df7ce16848ff5ccb0e2606e2b","isMergeCommit":false,"messageTitle":"Add JavaDoc for DateTimeHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":3}}},{"hash":"631c252db7a6abfeb5a838cc540ccb71985d0912","isMergeCommit":false,"messageTitle":"Add Find class with supporting methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"b0f8afb2ce2bc633951e3009a4f0b043894ec320","isMergeCommit":false,"messageTitle":"Implement Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":36,"deletions":8}}},{"hash":"49e124dc5d9c27a2ccb9bdb29ecebc58d5e4b332","isMergeCommit":false,"messageTitle":"Fix switch case indents","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":42}}},{"hash":"53d65fd4ea5a0bf53cc69d4fdd888dd4ab5d8af9","isMergeCommit":false,"messageTitle":"Fix some javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c4dca5f1e82d2f67a1dccc998ad242bb6907e2ed","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ji-just-ji/branch-Level-9","messageBody":"Branch level 9","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"4ba7b430ece4c0a04b2f718cd43e1c4a4582db0b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"d499a33d471448c548f611a3a3c66b276a6e9ac7","isMergeCommit":false,"messageTitle":"Begin Junit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"80bb7a1cfbf20433df6fef88543d7928115052cf","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-PR"],"fileTypesAndContributionMap":{"md":{"insertions":28,"deletions":24}}}]},{"date":"2023-09-05","commitResults":[{"hash":"347d8f1369302bd67f21aab05c8439d1825f280e","isMergeCommit":false,"messageTitle":"Load javafx","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":47,"deletions":28}}},{"hash":"478839513617e3ef520de1bd6fa5f405373cc34c","isMergeCommit":false,"messageTitle":"Add screen and button press","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1f4e8625eb24a4687c4a053bb1ddceb2f3f4f9c1","isMergeCommit":false,"messageTitle":"Add some GUI features","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":61,"deletions":0},"java":{"insertions":23,"deletions":0}}},{"hash":"6f3462d9817f113b9299327fe12f68125067b637","isMergeCommit":false,"messageTitle":"Revert \"Add some GUI features\"","messageBody":"This reverts commit 1f4e8625eb24a4687c4a053bb1ddceb2f3f4f9c1.\n","fileTypesAndContributionMap":{"fxml":{"insertions":0,"deletions":61},"java":{"insertions":0,"deletions":23}}},{"hash":"22a11326fb8baf9163655c18efb4ab2007fd0ae7","isMergeCommit":false,"messageTitle":"Fix attempt 1","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":28}}},{"hash":"e6254eb1d926e64a58a9c5083673c0dbadfb9804","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Add some GUI features\"\"","messageBody":"This reverts commit 6f3462d9817f113b9299327fe12f68125067b637.\n","fileTypesAndContributionMap":{"fxml":{"insertions":61,"deletions":0},"java":{"insertions":23,"deletions":0}}},{"hash":"213d9c24f5b5a1f2ab41006e7be37e05a50cbf5d","isMergeCommit":false,"messageTitle":"Follow instructions","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":26},"java":{"insertions":69,"deletions":27}}},{"hash":"5cf1e3cbbc125624a65ca3da708edd19c3d22267","isMergeCommit":false,"messageTitle":"Iteration 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":5}}}]},{"date":"2023-09-07","commitResults":[{"hash":"38c6fd9fa69ec1e2ce6e08c05de484505b32d535","isMergeCommit":false,"messageTitle":"Split DialogBox","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":49,"deletions":0},"java":{"insertions":26,"deletions":27}}},{"hash":"63ead52590cee4260c68ff2ba2e2931dfb42e726","isMergeCommit":false,"messageTitle":"Split DialogBox","messageBody":"","tags":["A-GUI"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"bbf801513fda74ba693cce58b7721209991664c2","isMergeCommit":false,"messageTitle":"Split DialogBoAdd return as string for GUI output","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":19,"deletions":0},"java":{"insertions":154,"deletions":24}}},{"hash":"00acfb8d11bb3b75c408354120bba60ee3d8ed2e","isMergeCommit":false,"messageTitle":"Fix TaskHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":37}}},{"hash":"6575df286c731b9936a71a7f2aff9f99a3a32b7f","isMergeCommit":false,"messageTitle":"Finish TaskHandler fix","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":8}}},{"hash":"e6c0d280a065edfd89131b8e003cc033b9aa4e18","isMergeCommit":false,"messageTitle":"Setup some responses in GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":180,"deletions":69}}},{"hash":"a575c60d066046072c07acae92504938373f125f","isMergeCommit":false,"messageTitle":"Add flip for peko response","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":23,"deletions":2}}}]},{"date":"2023-09-11","commitResults":[{"hash":"aa62e4b01b70548ad58fc69674f9fd20b63c0411","isMergeCommit":false,"messageTitle":"Change gui header text","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":39,"deletions":20}}},{"hash":"d6ac8db35a3c2838170d7fdb25a495eeaf7b48ef","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ji-just-ji/GUI","messageBody":"GUI","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"4a6cc7f9cb1ea63135611a285a9557db6d511257","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"915a4a1d459bb76cd5783d73cac6c552b614176a","isMergeCommit":false,"messageTitle":"Update javadocs for some classes","messageBody":"There are several classes lacking javadocs for\nthe class and certain methods.\nAdding the javadocs to improve code quality and ease of understanding code.\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":2}}},{"hash":"59efe46d6d8e9fa9227b485ae2c354c53240d4ca","isMergeCommit":false,"messageTitle":"Update more javadocs for some classes","messageBody":"There are several classes lacking javadocs for\nthe class and certain methods.\nAdding the javadocs to improve code quality and ease of understanding code.\n","fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":6}}},{"hash":"10978ad338104b1613d68475b2f0d4e49333dba7","isMergeCommit":false,"messageTitle":"Update remaining javadocs for some classes","messageBody":"There are several classes lacking javadocs for\nthe class and certain methods.\nAdding the javadocs to improve code quality and ease of understanding code.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":105,"deletions":9}}},{"hash":"45140528ea69e8574af397fb36fc9d2259eca743","isMergeCommit":false,"messageTitle":"Fix double input bug","messageBody":"There was a bug that caused instructions to be executed twice.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":7,"deletions":4}}}]},{"date":"2023-09-15","commitResults":[{"hash":"fae642d0886204a615395c001b5c826831e2dbcb","isMergeCommit":false,"messageTitle":"Add Junit Test for Deadline and Task classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":89,"deletions":15}}},{"hash":"c1e6000eac7ddadfab94812b52c1dbd30f1fde4e","isMergeCommit":false,"messageTitle":"Add missing assertions to junit tests","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c8d0d66bf60317c979c64f4e27bbc2e308e38d3f","isMergeCommit":false,"messageTitle":"Create ArchiveHandler","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":50,"deletions":0}}},{"hash":"79393065f512ab91813e0c4b8e55ed96da260aee","isMergeCommit":false,"messageTitle":"Remove rewrite archive every time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":3,"deletions":6}}},{"hash":"21a27034419de3398c8cf068d6f38cefa3bdddec","isMergeCommit":false,"messageTitle":"Override equals for Tasks to make sure identicle Tasks are based on task details.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":0}}},{"hash":"4d92d10c84f9b2deb122c757cc5a2d858ed28d85","isMergeCommit":false,"messageTitle":"Add no duplicates in Archive functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":9}}},{"hash":"ec6442b0df02d01cb136f038cddb9e198e762475","isMergeCommit":false,"messageTitle":"Bug fix for checking if exists in Archive already","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":6,"deletions":4}}},{"hash":"be2f61f63885f4e5f9ffe3e521c1c050369c9d3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"# Conflicts:\n#\tsrc/main/List.txt\n#\tsrc/main/java/peko/Peko.java\n#\tsrc/main/java/peko/UserInputHandler.java\n#\tsrc/main/java/peko/memory/StorageHandler.java\n#\tsrc/main/java/peko/tasks/Event.java\n#\tsrc/main/java/peko/tasks/TaskHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"7f122dfd9ca73d0265aee40009668410e15d4123","isMergeCommit":false,"messageTitle":"Added javadocs to ArchiveHandler and Peko","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":2}}},{"hash":"b18959332f98b2e178649a68cec2493a3ff9c0c2","isMergeCommit":false,"messageTitle":"Add archive option for user","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":39,"deletions":4}}}]},{"date":"2023-09-18","commitResults":[{"hash":"a88425d4b1bb8b49749cdddf51e2921d191ee634","isMergeCommit":false,"messageTitle":"Revert \"Add missing assertions to junit tests\"","messageBody":"This reverts commit c1e6000eac7ddadfab94812b52c1dbd30f1fde4e.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"504b5f36dba161950a99ecf9dc2dd659b09c03d8","isMergeCommit":false,"messageTitle":"Add assertions for DeadlineTest","messageBody":"Checks if Deadline creates the appropriate deadlines with an input String.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"874eea46cc3975d2a258f5eb2a407f51920c6ab9","isMergeCommit":true,"messageTitle":"Merge pull request #4 from ji-just-ji/branch-A-Assertions","messageBody":"Add Assertions","fileTypesAndContributionMap":{}},{"hash":"cb3e25edcfa209a91b083e11ff943a6599265f48","isMergeCommit":false,"messageTitle":"Remove unneeded functions in GUIController","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}},{"hash":"bb27e5768bc4055911c9e8b4fe93d681975d5e1f","isMergeCommit":false,"messageTitle":"Remove unnecessary comments in Launcher","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"b41fb6fb27de8a4bbd5e57d787e2d8ce91fec4d9","isMergeCommit":true,"messageTitle":"Merge pull request #5 from ji-just-ji/GUI","messageBody":"Remove GUI branch","fileTypesAndContributionMap":{}},{"hash":"0b225e7c5550c548b07deb9e89f6609c92bc4471","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"aa58e7a45b2099d5ac731ff024ee37831b64c5e2","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ji-just-ji/branch-Level-10","messageBody":"Merge branch level 10","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ji-just-ji":{"java":2080,"md":28,"fxml":113,"sh":1,"bat":1,"gradle":36,"txt":27}},"authorContributionVariance":{"ji-just-ji":64960.023},"authorDisplayNameMap":{"ji-just-ji":"CS2103T-T13-1 WONG..KEAN"}} +{"authorDailyContributionsMap":{"ji-just-ji":[{"date":"2023-08-21","commitResults":[{"hash":"0471a8b1de55861cd1b37097f71de31d7ed7c485","isMergeCommit":false,"messageTitle":"Level 0 Initialize Change name to Peko Add intro and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"e770b5c127f79ebe97c2899da37b8ab33259f01a","isMergeCommit":false,"messageTitle":"Fixed intro logo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5f577f6370707e6d86a4a8383d5f41cd73b4977d","isMergeCommit":false,"messageTitle":"Level-1 Add echo functionality Move introduction into separate function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":29,"deletions":4}}},{"hash":"9c9f2b7e1488233c80dd17080b35667ac2b26863","isMergeCommit":false,"messageTitle":"Add loop for echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"8f232707645f4b3ed98d34c6f425c0b25ff9594e","isMergeCommit":false,"messageTitle":"Move final variables together","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"020f1bf55a8a865f9f096134575fb52a09392e8e","isMergeCommit":false,"messageTitle":"Remove unneeded intitalizations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"4f07bd284eff2e550a03508724e40d03d2df0d76","isMergeCommit":false,"messageTitle":"Add Copypasta text Add easteregg","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":28,"deletions":1}}},{"hash":"6610889dbd406259c0ebf241ecee4a235946c223","isMergeCommit":false,"messageTitle":"Update Copypasta text","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4}}},{"hash":"598b96079f92e61f1c3ecbca1005d6388bacb690","isMergeCommit":false,"messageTitle":"Updated Copypasta text","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"7368d15de0fe5c59e8d2d59313ff821ef1ebe885","isMergeCommit":false,"messageTitle":"Added read and write capability","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":44,"deletions":3}}},{"hash":"028406cf7ce6ae3d13a4f8cc38c20fcade2af3e8","isMergeCommit":false,"messageTitle":"Modify input checking Make echo its own function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":36,"deletions":23}}},{"hash":"89f03cd1fa34306e638015819d9e23bb14054a42","isMergeCommit":false,"messageTitle":"Fix write input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":13,"deletions":12}}}]},{"date":"2023-08-23","commitResults":[{"hash":"883b632645304c85d9b5b16c816e941454d252c9","isMergeCommit":false,"messageTitle":"Change to array to store to do list Fix other functions to work with array","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":67,"deletions":14}}},{"hash":"606fbe35617b9f751ab5fad76317a520bd064181","isMergeCommit":false,"messageTitle":"Add Task object Move tasks into Task object","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c6637b7b74cc6f5a2b2656bae2adfafec6ce0da4","isMergeCommit":false,"messageTitle":"Add ToDo Deadline Event objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e4977984a4cf010b5039d3afd4b3f5dceca0c905","isMergeCommit":false,"messageTitle":"Add deadline timing capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":8}}},{"hash":"fc492bb82cc46a5109ba67595da4981f3338d9ec","isMergeCommit":false,"messageTitle":"Add deadline check","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":8}}},{"hash":"7910f014d74b3336e4a15ff0ee89ade829dfb8b2","isMergeCommit":false,"messageTitle":"Add InvalidTaskException to handle non task input Update Task ToDos Deadline Event to throw InvalidTaskException","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":17}}},{"hash":"e5170f3028214645e9287ebeb689349652e882d0","isMergeCommit":false,"messageTitle":"Change Expected.txt header","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"7ff0c26ef4af06bf79e52626fb5786f2d96d591b","isMergeCommit":false,"messageTitle":"Setup automated text U/I testing Add","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":13},"bat":{"insertions":3,"deletions":3},"sh":{"insertions":5,"deletions":5}}},{"hash":"ce6048a0314ab4b4abcf8c0f66fe777230e86f0e","isMergeCommit":false,"messageTitle":"Fix task bugs Fix automated test U/I testing bugs","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":46,"deletions":20},"bat":{"insertions":1,"deletions":1}}},{"hash":"885bb01844c90734668ced7ab3d5233a3cf6c45f","isMergeCommit":false,"messageTitle":"Fix runtest.sh changes","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":5,"deletions":5}}},{"hash":"ddefca37e237b440c2c395e4ad6253d664528a38","isMergeCommit":false,"messageTitle":"Update List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":16}}},{"hash":"2b21d3b4c30b9582d3ccd34192099da6bd79cacb","isMergeCommit":false,"messageTitle":"Save attempt 1 Add SaveHandler","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":143,"deletions":22}}},{"hash":"5dccc93fe84d45b89df19664582ea067ba313246","isMergeCommit":false,"messageTitle":"Save attempt 1 cont","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":38,"deletions":48}}},{"hash":"317b8a14e6c497d67eceaee57fdd96bfcf65179b","isMergeCommit":false,"messageTitle":"Add save and load into List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":59,"deletions":2}}},{"hash":"a13243853632a01629b44be81d80efd5178c2983","isMergeCommit":false,"messageTitle":"Remove unused methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":70}}},{"hash":"f79dd229a305b99ceb3b5398559d179e449e3fe6","isMergeCommit":false,"messageTitle":"Update List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":16}}},{"hash":"060ec5c90e4a4cde81df5be3ab167f2e4feea2fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027Save_(Level-7)\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"4558c652786fd19f99472f63a613fd1bde9f6712","isMergeCommit":false,"messageTitle":"Made to save upon every update","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"15ac47939c521869e6d81abbf76b0141cebf4b9f","isMergeCommit":false,"messageTitle":"Add datetime functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":47,"deletions":10}}},{"hash":"b2ffa572766bc0eabba7fdf80349764a3348f02d","isMergeCommit":false,"messageTitle":"Begin UIHandling","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":24,"deletions":0}}},{"hash":"27fc4597488afde8e0a5d457d72815341ece8e48","isMergeCommit":false,"messageTitle":"More UIHandling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}}]},{"date":"2023-08-25","commitResults":[{"hash":"3d253605d629ff3a57daf55afa534975bb3344ad","isMergeCommit":false,"messageTitle":"Add echo and readArray","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"1085a528b6b2c47a3771f915dc2853ae8c6d6478","isMergeCommit":false,"messageTitle":"Add mark and unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":28}}},{"hash":"679a796bc7b3d48c924dab4e305e8bc025d65509","isMergeCommit":false,"messageTitle":"Add todo deadline event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":58}}},{"hash":"75d0f4c7082ec859a0b430407d53c6cdaf66f1e6","isMergeCommit":false,"messageTitle":"UI handling draft1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":93}}},{"hash":"d2cc9f7cef855006c6fba1a00caac07ce146b674","isMergeCommit":false,"messageTitle":"UI handling Still has missing line breaks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":24,"deletions":89}}},{"hash":"19a78cd267d9e0c7f0b464be6ad4c82e12472b60","isMergeCommit":false,"messageTitle":"UI Handling bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":3}}},{"hash":"12a9187a7ed4901916c13165d0d4bf3f52fd7dec","isMergeCommit":false,"messageTitle":"Fix easter egg","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":4,"deletions":0}}},{"hash":"070fdb594644cac2f737ec6b203801ecfb3df12f","isMergeCommit":false,"messageTitle":"Begin StorageHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":94}}},{"hash":"eeb50cdf62b453faf533dea868256d65124ab5ba","isMergeCommit":false,"messageTitle":"Fix some StorageHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":29}}},{"hash":"547f94eb113e2e87c39b1501ab6838acb46b100e","isMergeCommit":false,"messageTitle":"Make StorageHandler static","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":10,"deletions":15}}}]},{"date":"2023-08-27","commitResults":[{"hash":"8be7de99504fbacf69b2cb23b39988708aaef85e","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":34,"deletions":21}}},{"hash":"5e7c9ed7feb4b48a3e24b8fbc45348d4af1fd0ea","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"d0b4c9f2c91e305402c4e2c29ed8bdc8c94672ce","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":17,"deletions":11}}},{"hash":"53100c119f9984ab1b01fb6fc59fccfe10bd21ef","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":34,"deletions":32}}},{"hash":"2a7bf79b262e1944418310ac757e88f19b7b9650","isMergeCommit":false,"messageTitle":"Move things around Add Parser UI TaskHandler Moved Enum out","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":237,"deletions":186}}},{"hash":"578bca4360f4835265bd550fe6b53068bed89047","isMergeCommit":false,"messageTitle":"Change StorageHandler to static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}},{"hash":"2152c073c45a5926f80ad514e0ac890ae0906409","isMergeCommit":false,"messageTitle":"Fix TaskHandler string name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"1d4143a6ac91fad35d925ed5c42c9616f20ed4b3","isMergeCommit":false,"messageTitle":"Update List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2}}},{"hash":"174f665f6c84c4535482df11aa716a6bae002032","isMergeCommit":true,"messageTitle":"Merge branch \u0027StorageHandler\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"45d0c24e6f3bb0929a2957c830a207f995669014","isMergeCommit":false,"messageTitle":"Move to all to peko package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":11}}},{"hash":"7e170140e8366bac4811338f59779b6446f54b3f","isMergeCommit":false,"messageTitle":"Bug fix","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":99}}}]},{"date":"2023-08-30","commitResults":[{"hash":"968913c3329477f4d323dc6c410d766aac5da163","isMergeCommit":false,"messageTitle":"Revert \"Bug fix\"","messageBody":"This reverts commit 7e170140e8366bac4811338f59779b6446f54b3f.\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":0}}},{"hash":"0c4aa0b009ed7e4051ec43687625ee51229351b4","isMergeCommit":false,"messageTitle":"Revert \"Move to all to peko package\"","messageBody":"This reverts commit 45d0c24e6f3bb0929a2957c830a207f995669014.\n","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":150}}},{"hash":"86e6be056807c9020b7e9de87374b5be6a0c167a","isMergeCommit":false,"messageTitle":"Move to peko package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":29}}},{"hash":"d414291c1fadf703950abb87760dec8b14295155","isMergeCommit":false,"messageTitle":"Add autosave after every command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"76d9bc0831bab0b3257552f9ab547c84bea89f2d","isMergeCommit":false,"messageTitle":"Revert \"Add autosave after every command\"","messageBody":"This reverts commit d414291c1fadf703950abb87760dec8b14295155.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4c04e14e1ff432b97c222aca2ea09f5cc76022d3","isMergeCommit":false,"messageTitle":"Revert \"Move to peko package\"","messageBody":"This reverts commit 86e6be056807c9020b7e9de87374b5be6a0c167a.\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":49}}},{"hash":"5f578e281122925a079159bb04594a7970217400","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":11}}},{"hash":"6a4808ab85766a642ae02dc41e297b14f1952e94","isMergeCommit":false,"messageTitle":"Fix not writing to List.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":17,"deletions":20}}},{"hash":"4a17fb0d32ca9c9327495bb58864547e95221660","isMergeCommit":false,"messageTitle":"Add build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0}}},{"hash":"1e85a4b2faeff9bc08340d2ae52e65f0db1ecdbe","isMergeCommit":false,"messageTitle":"Add PekoTest for junit test","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":9,"deletions":2}}},{"hash":"513a1613ba276b6b74af49c783b9d33ba0b25e55","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradel-support-ji-just-ji\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"8fdc9a70956f02c4ea1d2625bbcf620704cfef0e","isMergeCommit":false,"messageTitle":"Add JavaDoc for Peko class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"797634259fc4de0521853cf035f7377f778bfe35","isMergeCommit":false,"messageTitle":"Add JavaDoc for UserInputHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"7396a57d21773ae7f7763e5256fd05fd08205fd6","isMergeCommit":false,"messageTitle":"Add JavaDoc for StorageHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":0}}},{"hash":"6a6a5f5e0c6b044530ff46fed108203cf16ef28e","isMergeCommit":false,"messageTitle":"Add JavaDoc for SaveHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":4}}},{"hash":"88c82c7e3bdd4c5df7ce16848ff5ccb0e2606e2b","isMergeCommit":false,"messageTitle":"Add JavaDoc for DateTimeHandler class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":3}}},{"hash":"631c252db7a6abfeb5a838cc540ccb71985d0912","isMergeCommit":false,"messageTitle":"Add Find class with supporting methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"b0f8afb2ce2bc633951e3009a4f0b043894ec320","isMergeCommit":false,"messageTitle":"Implement Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":36,"deletions":8}}},{"hash":"49e124dc5d9c27a2ccb9bdb29ecebc58d5e4b332","isMergeCommit":false,"messageTitle":"Fix switch case indents","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":42}}},{"hash":"53d65fd4ea5a0bf53cc69d4fdd888dd4ab5d8af9","isMergeCommit":false,"messageTitle":"Fix some javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c4dca5f1e82d2f67a1dccc998ad242bb6907e2ed","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ji-just-ji/branch-Level-9","messageBody":"Branch level 9","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"4ba7b430ece4c0a04b2f718cd43e1c4a4582db0b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"d499a33d471448c548f611a3a3c66b276a6e9ac7","isMergeCommit":false,"messageTitle":"Begin Junit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"80bb7a1cfbf20433df6fef88543d7928115052cf","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-PR"],"fileTypesAndContributionMap":{"md":{"insertions":28,"deletions":24}}}]},{"date":"2023-09-05","commitResults":[{"hash":"347d8f1369302bd67f21aab05c8439d1825f280e","isMergeCommit":false,"messageTitle":"Load javafx","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":47,"deletions":28}}},{"hash":"478839513617e3ef520de1bd6fa5f405373cc34c","isMergeCommit":false,"messageTitle":"Add screen and button press","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1f4e8625eb24a4687c4a053bb1ddceb2f3f4f9c1","isMergeCommit":false,"messageTitle":"Add some GUI features","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":61,"deletions":0},"java":{"insertions":23,"deletions":0}}},{"hash":"6f3462d9817f113b9299327fe12f68125067b637","isMergeCommit":false,"messageTitle":"Revert \"Add some GUI features\"","messageBody":"This reverts commit 1f4e8625eb24a4687c4a053bb1ddceb2f3f4f9c1.\n","fileTypesAndContributionMap":{"fxml":{"insertions":0,"deletions":61},"java":{"insertions":0,"deletions":23}}},{"hash":"22a11326fb8baf9163655c18efb4ab2007fd0ae7","isMergeCommit":false,"messageTitle":"Fix attempt 1","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":28}}},{"hash":"e6254eb1d926e64a58a9c5083673c0dbadfb9804","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Add some GUI features\"\"","messageBody":"This reverts commit 6f3462d9817f113b9299327fe12f68125067b637.\n","fileTypesAndContributionMap":{"fxml":{"insertions":61,"deletions":0},"java":{"insertions":23,"deletions":0}}},{"hash":"213d9c24f5b5a1f2ab41006e7be37e05a50cbf5d","isMergeCommit":false,"messageTitle":"Follow instructions","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":26},"java":{"insertions":69,"deletions":27}}},{"hash":"5cf1e3cbbc125624a65ca3da708edd19c3d22267","isMergeCommit":false,"messageTitle":"Iteration 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":5}}}]},{"date":"2023-09-07","commitResults":[{"hash":"38c6fd9fa69ec1e2ce6e08c05de484505b32d535","isMergeCommit":false,"messageTitle":"Split DialogBox","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":49,"deletions":0},"java":{"insertions":26,"deletions":27}}},{"hash":"63ead52590cee4260c68ff2ba2e2931dfb42e726","isMergeCommit":false,"messageTitle":"Split DialogBox","messageBody":"","tags":["A-GUI"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"bbf801513fda74ba693cce58b7721209991664c2","isMergeCommit":false,"messageTitle":"Split DialogBoAdd return as string for GUI output","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":19,"deletions":0},"java":{"insertions":154,"deletions":24}}},{"hash":"00acfb8d11bb3b75c408354120bba60ee3d8ed2e","isMergeCommit":false,"messageTitle":"Fix TaskHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":37}}},{"hash":"6575df286c731b9936a71a7f2aff9f99a3a32b7f","isMergeCommit":false,"messageTitle":"Finish TaskHandler fix","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":8}}},{"hash":"e6c0d280a065edfd89131b8e003cc033b9aa4e18","isMergeCommit":false,"messageTitle":"Setup some responses in GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":180,"deletions":69}}},{"hash":"a575c60d066046072c07acae92504938373f125f","isMergeCommit":false,"messageTitle":"Add flip for peko response","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":23,"deletions":2}}}]},{"date":"2023-09-11","commitResults":[{"hash":"aa62e4b01b70548ad58fc69674f9fd20b63c0411","isMergeCommit":false,"messageTitle":"Change gui header text","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":39,"deletions":20}}},{"hash":"d6ac8db35a3c2838170d7fdb25a495eeaf7b48ef","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ji-just-ji/GUI","messageBody":"GUI","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"4a6cc7f9cb1ea63135611a285a9557db6d511257","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"915a4a1d459bb76cd5783d73cac6c552b614176a","isMergeCommit":false,"messageTitle":"Update javadocs for some classes","messageBody":"There are several classes lacking javadocs for\nthe class and certain methods.\nAdding the javadocs to improve code quality and ease of understanding code.\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":2}}},{"hash":"59efe46d6d8e9fa9227b485ae2c354c53240d4ca","isMergeCommit":false,"messageTitle":"Update more javadocs for some classes","messageBody":"There are several classes lacking javadocs for\nthe class and certain methods.\nAdding the javadocs to improve code quality and ease of understanding code.\n","fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":6}}},{"hash":"10978ad338104b1613d68475b2f0d4e49333dba7","isMergeCommit":false,"messageTitle":"Update remaining javadocs for some classes","messageBody":"There are several classes lacking javadocs for\nthe class and certain methods.\nAdding the javadocs to improve code quality and ease of understanding code.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":105,"deletions":9}}},{"hash":"45140528ea69e8574af397fb36fc9d2259eca743","isMergeCommit":false,"messageTitle":"Fix double input bug","messageBody":"There was a bug that caused instructions to be executed twice.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":7,"deletions":4}}}]},{"date":"2023-09-15","commitResults":[{"hash":"fae642d0886204a615395c001b5c826831e2dbcb","isMergeCommit":false,"messageTitle":"Add Junit Test for Deadline and Task classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":89,"deletions":15}}},{"hash":"c1e6000eac7ddadfab94812b52c1dbd30f1fde4e","isMergeCommit":false,"messageTitle":"Add missing assertions to junit tests","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c8d0d66bf60317c979c64f4e27bbc2e308e38d3f","isMergeCommit":false,"messageTitle":"Create ArchiveHandler","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":50,"deletions":0}}},{"hash":"79393065f512ab91813e0c4b8e55ed96da260aee","isMergeCommit":false,"messageTitle":"Remove rewrite archive every time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":3,"deletions":6}}},{"hash":"21a27034419de3398c8cf068d6f38cefa3bdddec","isMergeCommit":false,"messageTitle":"Override equals for Tasks to make sure identicle Tasks are based on task details.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":0}}},{"hash":"4d92d10c84f9b2deb122c757cc5a2d858ed28d85","isMergeCommit":false,"messageTitle":"Add no duplicates in Archive functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":9}}},{"hash":"ec6442b0df02d01cb136f038cddb9e198e762475","isMergeCommit":false,"messageTitle":"Bug fix for checking if exists in Archive already","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":6,"deletions":4}}},{"hash":"be2f61f63885f4e5f9ffe3e521c1c050369c9d3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"# Conflicts:\n#\tsrc/main/List.txt\n#\tsrc/main/java/peko/Peko.java\n#\tsrc/main/java/peko/UserInputHandler.java\n#\tsrc/main/java/peko/memory/StorageHandler.java\n#\tsrc/main/java/peko/tasks/Event.java\n#\tsrc/main/java/peko/tasks/TaskHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"7f122dfd9ca73d0265aee40009668410e15d4123","isMergeCommit":false,"messageTitle":"Added javadocs to ArchiveHandler and Peko","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":2}}},{"hash":"b18959332f98b2e178649a68cec2493a3ff9c0c2","isMergeCommit":false,"messageTitle":"Add archive option for user","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":39,"deletions":4}}}]},{"date":"2023-09-18","commitResults":[{"hash":"a88425d4b1bb8b49749cdddf51e2921d191ee634","isMergeCommit":false,"messageTitle":"Revert \"Add missing assertions to junit tests\"","messageBody":"This reverts commit c1e6000eac7ddadfab94812b52c1dbd30f1fde4e.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"504b5f36dba161950a99ecf9dc2dd659b09c03d8","isMergeCommit":false,"messageTitle":"Add assertions for DeadlineTest","messageBody":"Checks if Deadline creates the appropriate deadlines with an input String.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"874eea46cc3975d2a258f5eb2a407f51920c6ab9","isMergeCommit":true,"messageTitle":"Merge pull request #4 from ji-just-ji/branch-A-Assertions","messageBody":"Add Assertions","fileTypesAndContributionMap":{}},{"hash":"cb3e25edcfa209a91b083e11ff943a6599265f48","isMergeCommit":false,"messageTitle":"Remove unneeded functions in GUIController","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}},{"hash":"bb27e5768bc4055911c9e8b4fe93d681975d5e1f","isMergeCommit":false,"messageTitle":"Remove unnecessary comments in Launcher","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"b41fb6fb27de8a4bbd5e57d787e2d8ce91fec4d9","isMergeCommit":true,"messageTitle":"Merge pull request #5 from ji-just-ji/GUI","messageBody":"Remove GUI branch","fileTypesAndContributionMap":{}},{"hash":"0b225e7c5550c548b07deb9e89f6609c92bc4471","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"aa58e7a45b2099d5ac731ff024ee37831b64c5e2","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ji-just-ji/branch-Level-10","messageBody":"Merge branch level 10","fileTypesAndContributionMap":{}},{"hash":"6e06817e06a950795bd8fcf04412bbb510fdd31b","isMergeCommit":false,"messageTitle":"Commit some differences in line numbers and brackets","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"ji-just-ji":{"java":2078,"md":28,"fxml":113,"sh":1,"bat":1,"gradle":36,"txt":27}},"authorContributionVariance":{"ji-just-ji":64893.973},"authorDisplayNameMap":{"ji-just-ji":"CS2103T-T13-1 WONG..KEAN"}} diff --git a/keaganpzh_ip_master/authorship.json b/keaganpzh_ip_master/authorship.json index 43d652be..cf6d33d5 100644 --- a/keaganpzh_ip_master/authorship.json +++ b/keaganpzh_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":"keaganpzh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-27"},{"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":"keaganpzh"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"keaganpzh"},"content":" mainClass.set(\"rat.RatLauncher\")","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":"keaganpzh"},"content":" archiveBaseName \u003d \"Rat\"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" archiveVersion \u003d \"1.0\"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"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":{"keaganpzh":22,"-":40}},{"path":"data/rat.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"T, 0, this","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"N/ this","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":2}},{"path":"src/main/java/rat/Rat.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWelcome;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.io.RatInput;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates my version of Duke, called Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * Rat is a chatbot that helps the user keep track of their tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * @version Week-5","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":"public class Rat {","lastModifiedDate":"2023-08-18"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used to store the user\u0027s tasks in local storage.","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" private static RatStorage ratStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" private static RatTaskManager ratTaskManager;","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" private static RatNoteManager ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * The RatInput Object used to process user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" private static RatInput ratInput;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" * The Scanner object used to read user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" private static Scanner sc;","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-18"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" * The file path of the file to be read from and written to.","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" private static String filePath \u003d \"data/rat.txt\";","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Rat object.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" public Rat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" initialise();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" * Initialises the Rat program.","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a RatTaskManager object, Scanner object, and a RatInput Object.","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" public static void initialise() {","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" printWelcome();","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" ratStorage \u003d new RatStorage(filePath);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" ratTaskManager \u003d new RatTaskManager(ratStorage);","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" ratNoteManager \u003d new RatNoteManager(ratStorage);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" ratInput \u003d new RatInput(sc, ratTaskManager, ratNoteManager);","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" * Returns the response to the user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user\u0027s input generated from respective commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" return ratInput.handleInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" * Returns the welcome message of Rat.","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" * @return The welcome message of Rat.","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" public String getWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" return \"Hello! I\u0027m Rat! What can I do for you? Type \\\"help\\\" to see a list of commands\";","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" * The main method of Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" Rat.initialise();","lastModifiedDate":"2023-08-19"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" ratInput.parseInputs();","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" sc.close();","lastModifiedDate":"2023-08-19"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-18"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-18"}],"authorContributionMap":{"keaganpzh":99}},{"path":"src/main/java/rat/RatLauncher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import rat.gui.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * A launcher class to launch the application with GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public class RatLauncher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Launches the application with GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":19}},{"path":"src/main/java/rat/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that adds a task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class AddCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * The type of task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" private final CommandType commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private final String input;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a AddCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * @param commandType The type of task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" public AddCommand(RatTaskManager ratTaskManager, String input, CommandType commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * Adds a ToDo task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * @param params The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" private String addToDo(String params) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" int todoParamsStart \u003d 5;","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" String todoParams \u003d params.substring(todoParamsStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.addToDo(todoParams);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"To Do name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" return \"To Do name cannot be empty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * Adds a Deadline task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" * @param params The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" private String addDeadline(String params) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" int deadlineParamsStart \u003d 9;","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" int nameIndex \u003d 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" int deadlineIndex \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" String deadlineParams \u003d params.substring(deadlineParamsStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" String[] paramsArr \u003d deadlineParams.split(\" /by \");","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" String name \u003d paramsArr[nameIndex];","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" String deadline \u003d paramsArr[deadlineIndex];","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" validateTime(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.addDeadline(deadline, name);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Deadline name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" return \"Deadline name cannot be empty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid deadline format. Please use \\\"deadline \u003cname\u003e /by \u003cdeadline\u003e\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid deadline format. Please use \\\"deadline \u003cname\u003e /by \u003cdeadline\u003e\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" * Adds an Event task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" * @param params The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" private String addEvent(String params) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" int eventParamsStart \u003d 6;","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" params \u003d params.substring(eventParamsStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" String eventName \u003d params.split(\" /from \")[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" if (eventName.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Event name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" String[] time \u003d params.split(\" /from \")[1].split(\" /to \");","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" String startTime \u003d time[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" String endTime \u003d time[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" validateTime(startTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" validateTime(endTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.addEvent(startTime, endTime, eventName);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Event name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" return \"Event name cannot be empty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid event format. Please use \\\"event \u003cname\u003e /from \u003cstart\u003e /to \u003cend\u003e\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid event format. Please use \\\"event \u003cname\u003e /from \u003cstart\u003e /to \u003cend\u003e\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":" return this.addToDo(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" return this.addDeadline(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" return this.addEvent(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":" this.addToDo(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" this.addDeadline(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" this.addEvent(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":141}},{"path":"src/main/java/rat/command/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This enum encapsulates the different types of commands that Rat can handle.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" MARK, UNMARK, TODO, DEADLINE, EVENT, ADD_NOTE, DELETE_NOTE, INVALID","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":8}},{"path":"src/main/java/rat/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that deletes a task from the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class DeleteCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * The index of the first character of the parameters in the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" private static final int DELETE_PARAMS_START \u003d 7;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains the index of the task to be deleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private String input;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a DeleteCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input passed from RatInput that contains the index of the task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public DeleteCommand(RatTaskManager ratTaskManager, String input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" String param \u003d this.input.substring(DELETE_PARAMS_START);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" if (param.equals(\"all\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.deleteAll();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(param);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.deleteItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"delete\\\" command must be followed by a number\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" return \" \\\"delete\\\" command must be followed by a number\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" String param \u003d this.input.substring(DELETE_PARAMS_START);","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" if (param.equals(\"all\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.deleteAll();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(param);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.deleteItem(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"delete\\\" command must be followed by a number\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":67}},{"path":"src/main/java/rat/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printExit;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that exits the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"public class ExitCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * Constructor for an ExitCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public ExitCommand(RatTaskManager ratTaskManager, RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager, ratNoteManager);","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.save();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager.save();","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" printExit();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager.save();","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" printExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" System.exit(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":38}},{"path":"src/main/java/rat/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a Find command.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * A find command searches the task list for tasks that contain a keyword, and prints the matching tasks to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public class FindCommand extends RatCommand {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * The keyword to search for.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" private String keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a FindCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" public FindCommand(RatTaskManager ratTaskManager, String input) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" int keywordStart \u003d 7;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" this.keyword \u003d input.substring(keywordStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.printFoundTasks(this.keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.printFoundTasks(this.keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":36}},{"path":"src/main/java/rat/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that marks a task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class MarkCommand extends ModifyCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * The index of the first character of the parameters in the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" private static final int MARK_PARAMS_START \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains the index of the task to be marked as done.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private String[] inputs;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a MarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param inputs The user input passed from RatInput that contains the index of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public MarkCommand(RatTaskManager ratTaskManager, String... inputs) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" this.inputs \u003d inputs;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[MARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.markItemDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" return \" \\\"mark\\\" command must be followed by a number\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[MARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.markItemDone(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":57}},{"path":"src/main/java/rat/command/ModifyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that modifies the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * A modification is either a marking or unmarking of a task as done/undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public abstract class ModifyCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a ModifyCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" public ModifyCommand(RatTaskManager ratTaskManager) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" public abstract String getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":24}},{"path":"src/main/java/rat/command/NoteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that handles the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * This command can add and delete notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"public class NoteCommand extends RatCommand {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * The user input passed into the NoteCommand.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" private final String input;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" * The type of NoteCommand.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * Can be either ADD_NOTE, DELETE_NOTE or INVALID.","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" private final CommandType noteCommandType;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a NoteCommmand Object.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * Parses the user input and initialises the NoteCommand object.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input passed into the NoteCommand.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" public NoteCommand(RatNoteManager ratNoteManager, String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" super(ratNoteManager);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" int commandTypeIndex \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" String[] inputs \u003d input.split(\" \");","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" if (inputs.length \u003c 2) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.INVALID;","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" switch (inputs[commandTypeIndex]) {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" case \"/add\":","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.ADD_NOTE;","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" case \"/delete\":","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.DELETE_NOTE;","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.INVALID;","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * Adds a note to the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" * Parses the user input to get the note to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note creation, or the reason for an unsuccessful one.","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" public String addNote() {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" int noteAddParamsStart \u003d 10;","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" String noteParams \u003d this.input.substring(noteAddParamsStart);","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.addNote(noteParams);","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" return \"Note cannot be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" * Deletes a note from the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * Parses the user input to get the index of the note to be deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note deletion, or the reason for an unsuccessful one.","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" public String deleteNote() {","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" int noteIndexToDelete \u003d 2;","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.deleteNote(Integer.parseInt(this.input.split(\" \")[noteIndexToDelete]));","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return \"Note index must be an integer\";","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" return \"Note index must be within the range of the note list\";","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" switch (this.noteCommandType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" case ADD_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" return this.addNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" case DELETE_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" return this.deleteNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" case INVALID:","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" return \"Note command must be of the form: note /add \u003cnote\u003e or note /delete \u003cindex\u003e\";","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" switch (this.noteCommandType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" case ADD_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" this.addNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" case DELETE_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" this.deleteNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Note command must be of the form: note /add \u003cnote\u003e or note /delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":112}},{"path":"src/main/java/rat/command/RatCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the commands that can be executed by Rat.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * Each command has a corresponding \u0027execute\u0027 method that is called by RatInput.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"public abstract class RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * This RatTaskManager should be initialised in main.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" protected RatTaskManager ratTaskManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * This RatNoteManager should be initialised in main.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" protected RatNoteManager ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * This constructor is called when dealing with commands that modify the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" protected RatCommand(RatTaskManager ratTaskManager) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d ratTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatCommand object.","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * This constructor is called when dealing with commands that modify the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" protected RatCommand(RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatCommand object.","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" * This constructor is called when dealing with commands that modify both the task and note lists.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" protected RatCommand(RatTaskManager ratTaskManager, RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d ratTaskManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" * Executes the command which modifies the task list.","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" * Able to create, delete, and update tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" * Calls the respective methods to modify the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" public abstract String getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * Validates the time input by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" * @param time The time input by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" * @return True if the time is valid, false otherwise.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" * @throws ParseException If the time is not in the correct format.","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" protected static boolean validateTime(String time) throws ParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" SimpleDateFormat dateFormat \u003d new SimpleDateFormat(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" dateFormat.parse(time.trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":82}},{"path":"src/main/java/rat/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that marks a task as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class UnmarkCommand extends ModifyCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * The index of the first character of the parameters in the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" private static final int UNMARK_PARAMS_START \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains the index of the task to be marked as not done.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private String[] inputs;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a UnmarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param inputs The user input passed from RatInput that contains the index of the task to be marked as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public UnmarkCommand(RatTaskManager ratTaskManager, String... inputs) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" this.inputs \u003d inputs;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[UNMARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.unmarkItemDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" return \" \\\"mark\\\" command must be followed by a number\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[UNMARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.unmarkItemDone(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":57}},{"path":"src/main/java/rat/gui/LeftDialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * A custom control component using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"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":17,"author":{"gitId":"keaganpzh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"public class LeftDialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * The label containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * The ImageView to represent the speaker\u0027s face.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" * The label containing the time of the message.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" private Label time;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" * Constructs a DialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" private LeftDialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/LeftDialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" time.setText(LocalTime.now().format(DateTimeFormatter.ofPattern(\"HH:mm\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" * Factory method for creating a LeftDialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" public static LeftDialogBox getRatDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" return new LeftDialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":70}},{"path":"src/main/java/rat/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.Rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * A GUI for Rat using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * This class brings together Rat\u0027s logic and the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The Rat instance to be used by the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" private Rat rat \u003d new Rat();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Starts the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param stage the primary stage for this application, onto which the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * Applications may create other stages, if needed, but they will not be primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" stage.setTitle(\"Rat\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setRat(rat);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":43}},{"path":"src/main/java/rat/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.Rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The scroll pane containing the dialog container.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The dialog container containing all the dialog boxes.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * The text field for user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * The button to send user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * The Rat instance.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" private Rat rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * The display image of the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/UserImage.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * The display image of Rat.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" private Image ratImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Megamind.jpeg\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" * Initializes the scroll pane to scroll to the bottom of the dialog container.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" * Sets the Rat instance to be used by the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" * @param rat The Rat instance to be used by the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" public void setRat(Rat rat) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" this.rat \u003d rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" assert(rat !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" LeftDialogBox.getRatDialog(rat.getWelcome(), ratImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Rat\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" if (!input.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" String response \u003d rat.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" assert userImage !\u003d null : \"User image should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" assert ratImage !\u003d null : \"Rat image should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" RightDialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" LeftDialogBox.getRatDialog(response, ratImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":95}},{"path":"src/main/java/rat/gui/RightDialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * A custom control component using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"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":17,"author":{"gitId":"keaganpzh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * This dialog box is right-aligned and is used for the user\u0027s messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"public class RightDialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * The label containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * The ImageView to represent the speaker\u0027s face.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" * The label containing the time of the message.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" private Label time;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" * Constructs a RightDialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" private RightDialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/RightDialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" time.setText(LocalTime.now().format(DateTimeFormatter.ofPattern(\"HH:mm\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" * Factory method for creating a RightDialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" public static RightDialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" return new RightDialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":71}},{"path":"src/main/java/rat/io/RatInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.io;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.command.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import rat.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"import rat.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"import rat.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"import rat.command.NoteCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"import rat.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the input handling of Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * RatInput parses user commands and initialises and executes the corresponding command object.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"public class RatInput {","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * The Scanner object used to read user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * This Scanner should be initialised in main.","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" * This RatTaskManager should be initialised in main.","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" private RatTaskManager ratTaskManager;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * This RatNoteManager should be initialised in main.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" private RatNoteManager ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * Constructor for RatInput.","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" * @param sc The Scanner object used to read user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" public RatInput(Scanner sc, RatTaskManager ratTaskManager, RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d ratTaskManager;","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" * Handles scanner input and calls handleInput for each scanner input.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" public void parseInputs() {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" handleInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" * Parses and processes the user input based on a set of commands.","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" * Creates and executes the corresponding command object.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user input, returned by respective commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" public String handleInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" int commandStart \u003d 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" String command \u003d inputArr[commandStart];","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" switch (command) {","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" case \"bye\":","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return new ExitCommand(this.ratTaskManager, this.ratNoteManager).getResponse();","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" case \"list\":","lastModifiedDate":"2023-08-19"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.listItems();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" case \"mark\":","lastModifiedDate":"2023-08-19"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" return new MarkCommand(this.ratTaskManager, inputArr).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-19"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" return new UnmarkCommand(this.ratTaskManager, inputArr).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" case \"todo\":","lastModifiedDate":"2023-08-19"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" return new AddCommand(this.ratTaskManager, input, CommandType.TODO).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-19"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" return new AddCommand(this.ratTaskManager, input, CommandType.DEADLINE).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" case \"event\":","lastModifiedDate":"2023-08-19"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" return new AddCommand(this.ratTaskManager, input, CommandType.EVENT).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" case \"delete\":","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" return new DeleteCommand(this.ratTaskManager, input).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" case \"find\":","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" return new FindCommand(this.ratTaskManager, input).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" case \"note\":","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" return new NoteCommand(this.ratNoteManager, input).getResponse();","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" case \"notes\":","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.listItems();","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" case \"save\":","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.save() + this.ratNoteManager.save();","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" case \"help\":","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" return this.showCommands();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-08-19"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" return \"Sorry, I don\u0027t understand what you mean by \" + input;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" * Returns a String containing a list of commands the user can use.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":" * @return A String containing a list of commands the user can use.","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":" public String showCommands() {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" String output \u003d \"Hello! I\u0027m Rat, your personal task manager.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" + \"Here are the commands you can use:\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" + \"\\nhelp: show this list of commands\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" + \"list: list all tasks\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" + \"mark \u003cindex\u003e: mark task at \u003cindex\u003e as done\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" + \"unmark \u003cindex\u003e: mark task at \u003cindex\u003e as not done\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" + \"todo \u003cname\u003e: add a todo task with \u003cname\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" + \"deadline \u003cname\u003e /by \u003cdeadline\u003e: add a deadline task with \u003cname\u003e and \u003cdeadline\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" + \"event \u003cname\u003e /from \u003cstart\u003e /to \u003cend\u003e: add an event task with \u003cname\u003e, \u003cstart\u003e and \u003cend\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" + \"delete \u003cindex\u003e: delete task at \u003cindex\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" + \"delete all: delete all tasks\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" + \"find \u003ckeyword\u003e: find all tasks with \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" + \"note /add \u003cbody\u003e: add a note with \u003cbody\u003e\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":" + \"note /delete \u003cindex\u003e: delete note at \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":" + \"notes: list all notes\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" + \"save: save all tasks and notes\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" + \"bye: exit the program\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" + \"\\nbuilt by @keaganpzh\";","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" printWithLines(output);","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":138}},{"path":"src/main/java/rat/io/RatPrinter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.io;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the printing of messages by Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class RatPrinter {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Prints the welcome message to the user.","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * The welcome message includes the current local date and time.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" String currentTime \u003d LocalDateTime.now().format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" String welcomeMsg \u003d","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" currentTime + \"\\n\\n Hello! I\u0027m Rat!\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" + \" type \\\"help\\\" to see a list of commands\";","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" printWithLines(welcomeMsg);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * Prints the exit message to the user.","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" public static void printExit() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" String exitMsg \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" printWithLines(exitMsg);","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" * Given a message, formats the message with lines and prints it to the user.","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" * @param msg The message to be printed.","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" public static void printWithLines(String msg) {","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" String output \u003d \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" + msg + \"\\n\"","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\";","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":44}},{"path":"src/main/java/rat/notes/Note.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.notes;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a note.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" * A note is a string of text that the user can add to.","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public class Note {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * The body of the note.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" private String body;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Note object.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * @param input The body of the note.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" public Note(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" this.body \u003d input;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" return \"[Note] \" + this.body;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * Formats the note for writing to file.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * @return The formatted note.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" return \"N/ \" + this.body;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":37}},{"path":"src/main/java/rat/notes/RatNoteManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.notes;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the logic of handling the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Includes methods to add and delete notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Handles writing to storage.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"public class RatNoteManager {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * The list of notes managed by RatNoteManager, represented as an ArrayList.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private ArrayList\u003cNote\u003e noteList;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private RatStorage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * Constructor for RatNoteManager.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * Checks if the file is empty, and if not, reads the data from the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Updates Note List with data from file.","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * @param storage The RatStorage object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" public RatNoteManager(RatStorage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" this.noteList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" if (!storage.isFileEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" getDataFromFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * Gets the data from the file and updates the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" protected void getDataFromFile() {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" int noteSymbolIndex \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" int noteBodyIndex \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" String[] data \u003d storage.readFile().split(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" for (String s : data) {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" String[] noteData \u003d s.split(\"/ \");","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" if (Objects.equals(noteData[noteSymbolIndex], \"N\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" Note note \u003d new Note(noteData[noteBodyIndex]);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" this.noteList.add(note);","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" for (int i \u003d 0; i \u003c noteList.size(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" str.append(i + 1).append(\". \").append(noteList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" * Adds a note to the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" * @param body The body of the note to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note creation.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" public String addNote(String body) {","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" Note note \u003d new Note(body);","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" this.noteList.add(note);","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this note:\\n\" + note + \"\\nNow you have \" + noteList.size()","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" + \" notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" * Deletes a note from the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" * @param index The index of the note to be deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note deletion.","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" public String deleteNote(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.noteList.size() || index \u003c 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Note not found\");","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" } else if (this.noteList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Note not found\");","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" Note item \u003d this.noteList.get(index - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" assert(item !\u003d null);","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" this.noteList.remove(index - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Noted. I\u0027ve removed this note:\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" + item","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.noteList.size() + \" notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" * Deletes all notes from the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user saying that all notes have been deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" public String deleteAll() {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" this.noteList.clear();","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Ok. I\u0027ve removed all notes.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":" * Lists all notes in the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user containing the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" public String listItems() {","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" if (this.noteList.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"You have no notes in the list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" return \"You have no notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" String list \u003d \"Here are the notes in your list:\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" + this + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" + \"You have \" + this.noteList.size() + \" notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" printWithLines(list);","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" return list;","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" * Saves the note list to the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" * Checks if the note list is already in the file, and if not, adds it to the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user saying that the notes are saved.","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" public String save() {","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":" for (Note note : this.noteList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"keaganpzh"},"content":" data.append(note.formatForFile()).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"keaganpzh"},"content":" String existingItems \u003d this.storage.readFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"keaganpzh"},"content":" if (!existingItems.contains(data.toString())) {","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"keaganpzh"},"content":" this.storage.addToFile(data.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"keaganpzh"},"content":" return \"Notes saved to file.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":147}},{"path":"src/main/java/rat/storage/RatStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the logic of handling the storage of Rat,","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * which includes reading and writing to a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"public class RatStorage {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The file path of the file to be read from and written to.","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private static File ratData;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for RatStorage.","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param filePath The file path of the file to be read from and written to.","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" public RatStorage(String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" ratData \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" if (!ratData.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" ratData.getParentFile().mkdirs();","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" ratData.createNewFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error initialising RatStorage: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * Checks if the file is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @return True if the file is empty, false otherwise.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" public boolean isFileEmpty() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" return ratData.length() \u003d\u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" * Overwrites the file with the given input.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * @param input The input to overwrite the file with.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" public void overwriteFile(String input) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" FileWriter fw \u003d new FileWriter(ratData);","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" fw.write(input);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" fw.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error overwriting file: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" * Appends the given input to the end of the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" * @param input The input to append to the end of the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" public void addToFile(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" FileWriter fw \u003d new FileWriter(ratData, true);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" fw.write(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" fw.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error adding to file: \" + e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" * Reads the file and returns its contents as a String.","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" * @return The contents of the file as a String.","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" public String readFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" Scanner sc \u003d new Scanner(ratData);","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" str.append(sc.nextLine()).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" sc.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"keaganpzh":93}},{"path":"src/main/java/rat/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * A Deadline task is a task with a deadline as a String.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * The deadline of the task, represented by a LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The deadline of the task, represented by a String.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" private String deadlineString;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses a String to represent the deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * Used during regular runtime of Rat where user enters data from the command line.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" protected Deadline(String deadline, String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" this.deadline \u003d LocalDateTime.parse(deadline, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.deadlineString \u003d this.deadline.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses a LocalDateTime object to represent the deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * Used when reading data from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" protected Deadline(LocalDateTime deadline, String name) {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" this.deadlineString \u003d this.deadline.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"[D]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" return taskType + super.toString() + \" (by: \" + this.deadlineString + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"D\";","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" return taskType + \", \" + super.formatForFile() + \", \" + this.deadline.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":61}},{"path":"src/main/java/rat/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates an Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * An Event task is a task with a start time and end time as Strings.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * The start time of the task, represented by a LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The end time of the task, represented by a String.","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * The start time of the task, represented by a String.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The date and time is formatted as \"EEE, d MMM yyyy HH:mm\".","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private String startTimeString;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * The end time of the task, represented by a String.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * The date and time is formatted as \"EEE, d MMM yyyy HH:mm\".","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" private String endTimeString;","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" * Constructor for an Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses Strings to represent the start time and end time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * Used during regular runtime of Rat where user enters data from the command line.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * @param startTime The start time of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @param endTime The end time of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" protected Event(String startTime, String endTime, String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" this.startTime \u003d LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" this.endTime \u003d LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" this.startTimeString \u003d this.startTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" this.endTimeString \u003d this.endTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" * Constructor for an Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses LocalDateTime objects to represent the start time and end time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" * Used when reading data from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * @param startTime The start time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" * @param endTime The end time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" protected Event(LocalDateTime startTime, LocalDateTime endTime, String name) {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" this.startTimeString \u003d this.startTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" this.endTimeString \u003d this.endTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"[E]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" return taskType + super.toString() + \" (from: \" + this.startTimeString + \" to: \" + this.endTimeString + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" return taskType + \", \" + super.formatForFile() + \", \"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" + this.startTime.toString() + \", \" + this.endTime.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":80}},{"path":"src/main/java/rat/tasks/RatTaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the taskList of Rat, which is a list of tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Includes methods to add, modify, and delete tasks.","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Handles writing to storage.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"public class RatTaskManager {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * The list of tasks managed by RatTaskManager, represented by an ArrayList.","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used to read and write the task list to local storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private RatStorage storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatTaskManager object.","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * Checks if stored file is empty and reads data from file if it is not.","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Updates taskList with data from file.","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * @param storage The RatStorage object used to read and write the task list to local storage.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" public RatTaskManager(RatStorage storage) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" if (!storage.isFileEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" getDataFromFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * Returns a list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" * @return A list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" public ArrayList\u003cTask\u003e findTasks(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" return foundTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" * Prints a list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" * @return A String representation of the list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" public String printFoundTasks(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d this.findTasks(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" if (foundTasks.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" String output \u003d \"No tasks found matching the keyword \" + \"\\\"\" + keyword + \"\\\"\" + \".\";","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" printWithLines(output);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" return output;","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" str.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" for (int i \u003d 0; i \u003c foundTasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" str.append((i + 1)).append(\". \").append(foundTasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" printWithLines(str.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" * Reads the data from the local storage file and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" protected void getDataFromFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" int taskSymbol \u003d 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" int taskStatus \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" int taskName \u003d 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" int firstTime \u003d 3;","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" int secondTime \u003d 4;","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" String[] data \u003d storage.readFile().split(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" for (String s : data) {","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" String[] taskData \u003d s.split(\", \");","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" switch (taskData[taskSymbol]) {","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" case \"T\":","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(new ToDo(taskData[taskName]));","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" case \"D\":","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(new Deadline(LocalDateTime.parse(taskData[firstTime]), taskData[taskName]));","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" case \"E\":","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(new Event(LocalDateTime.parse(taskData[firstTime]),","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" LocalDateTime.parse(taskData[secondTime]), taskData[taskName]));","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" if (taskData[taskStatus].equals(\"1\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" this.markItemDone(this.taskList.size());","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" // Do nothing","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" * Returns the String representation of RatTaskManager.","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" * The String representation is a numbered list of tasks.","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" * @return String representation of RatTaskManager.","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" str.append((i + 1)).append(\". \").append(this.taskList.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" * Adds a ToDo task to the taskList, given its name.","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a new ToDo object and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" * @param item Name of the ToDo task.","lastModifiedDate":"2023-08-21"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the ToDo task has been added.","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" public String addToDo(String item) {","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":" ToDo newToDo \u003d new ToDo(item);","lastModifiedDate":"2023-08-19"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(newToDo);","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this Deadline:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"keaganpzh"},"content":" + newToDo","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":145,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":146,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":148,"author":{"gitId":"keaganpzh"},"content":" * Adds a Deadline task to the taskList, given its deadline and name.","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a new Deadline object and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"keaganpzh"},"content":" * @param deadline Deadline of the Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":151,"author":{"gitId":"keaganpzh"},"content":" * @param name Name of the Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":152,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the Deadline task has been added.","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":154,"author":{"gitId":"keaganpzh"},"content":" public String addDeadline(String deadline, String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"keaganpzh"},"content":" Deadline newDeadline \u003d new Deadline(deadline, name);","lastModifiedDate":"2023-08-19"},{"lineNumber":156,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(newDeadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this Deadline:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"keaganpzh"},"content":" + newDeadline","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":163,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":164,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"keaganpzh"},"content":" * Adds an Event task to the taskList, given its start time, end time, and name.","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a new Event object and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"keaganpzh"},"content":" * @param startTime Start time of the Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":168,"author":{"gitId":"keaganpzh"},"content":" * @param endTime End time of the Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":169,"author":{"gitId":"keaganpzh"},"content":" * @param name Name of the Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":170,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the Event task has been added.","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":172,"author":{"gitId":"keaganpzh"},"content":" public String addEvent(String startTime, String endTime, String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"keaganpzh"},"content":" Event newEvent \u003d new Event(startTime, endTime, name);","lastModifiedDate":"2023-08-19"},{"lineNumber":174,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(newEvent);","lastModifiedDate":"2023-08-25"},{"lineNumber":175,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this Event:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"keaganpzh"},"content":" + newEvent","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":181,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":182,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":183,"author":{"gitId":"keaganpzh"},"content":" * Marks a task as done, given its 1-indexed index in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"keaganpzh"},"content":" * @param index Index of the task in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the task has been marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":187,"author":{"gitId":"keaganpzh"},"content":" public String markItemDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":190,"author":{"gitId":"keaganpzh"},"content":" } else if (this.taskList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":192,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":193,"author":{"gitId":"keaganpzh"},"content":" Task item \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":194,"author":{"gitId":"keaganpzh"},"content":" assert (item !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"keaganpzh"},"content":" item.markDone();","lastModifiedDate":"2023-08-19"},{"lineNumber":196,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Nice! I\u0027ve marked this task as done: \" + taskList.get(index - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":200,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":201,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":202,"author":{"gitId":"keaganpzh"},"content":" * Marks a task as not done, given its 1-indexed index in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"keaganpzh"},"content":" * @param index Index of the task in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the task has been marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":206,"author":{"gitId":"keaganpzh"},"content":" public String unmarkItemDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":209,"author":{"gitId":"keaganpzh"},"content":" } else if (this.taskList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":211,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":212,"author":{"gitId":"keaganpzh"},"content":" Task item \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"keaganpzh"},"content":" assert(item !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"keaganpzh"},"content":" item.unmarkDone();","lastModifiedDate":"2023-08-19"},{"lineNumber":215,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Ok, I\u0027ve marked this task as not done yet: \" + taskList.get(index - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":219,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":220,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":221,"author":{"gitId":"keaganpzh"},"content":" * Deletes a task from taskList, given its 1-indexed index in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":222,"author":{"gitId":"keaganpzh"},"content":" * @param index Index of the task in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":223,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the task has been deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":225,"author":{"gitId":"keaganpzh"},"content":" public String deleteItem(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":227,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":228,"author":{"gitId":"keaganpzh"},"content":" } else if (this.taskList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":229,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":230,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":231,"author":{"gitId":"keaganpzh"},"content":" Task item \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":232,"author":{"gitId":"keaganpzh"},"content":" assert(item !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":233,"author":{"gitId":"keaganpzh"},"content":" this.taskList.remove(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":234,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":235,"author":{"gitId":"keaganpzh"},"content":" + item.toString()","lastModifiedDate":"2023-08-19"},{"lineNumber":236,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":240,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":241,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":242,"author":{"gitId":"keaganpzh"},"content":" * Deletes all tasks from taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":243,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that all tasks have been deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":245,"author":{"gitId":"keaganpzh"},"content":" public String deleteAll() {","lastModifiedDate":"2023-09-03"},{"lineNumber":246,"author":{"gitId":"keaganpzh"},"content":" this.taskList.clear();","lastModifiedDate":"2023-08-25"},{"lineNumber":247,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Noted. I\u0027ve removed all tasks.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":248,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":251,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":252,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":253,"author":{"gitId":"keaganpzh"},"content":" * Displays all tasks in taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":254,"author":{"gitId":"keaganpzh"},"content":" * Formats the taskList\u0027s String representation with a message and count.","lastModifiedDate":"2023-08-25"},{"lineNumber":255,"author":{"gitId":"keaganpzh"},"content":" * @return A String representation of the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":256,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":257,"author":{"gitId":"keaganpzh"},"content":" public String listItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"keaganpzh"},"content":" if (this.taskList.isEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":259,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"You have no tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":260,"author":{"gitId":"keaganpzh"},"content":" return \"You have no tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-08-19"},{"lineNumber":262,"author":{"gitId":"keaganpzh"},"content":" String list \u003d \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-08-19"},{"lineNumber":263,"author":{"gitId":"keaganpzh"},"content":" + this + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":264,"author":{"gitId":"keaganpzh"},"content":" + \"You have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-25"},{"lineNumber":265,"author":{"gitId":"keaganpzh"},"content":" printWithLines(list);","lastModifiedDate":"2023-08-24"},{"lineNumber":266,"author":{"gitId":"keaganpzh"},"content":" return list;","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":268,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":269,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":270,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":271,"author":{"gitId":"keaganpzh"},"content":" * Method that updates local storage after each run of Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":272,"author":{"gitId":"keaganpzh"},"content":" * Checks if the taskList is already in the file, and if not, adds it to the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":273,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":274,"author":{"gitId":"keaganpzh"},"content":" public String save() {","lastModifiedDate":"2023-09-12"},{"lineNumber":275,"author":{"gitId":"keaganpzh"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":276,"author":{"gitId":"keaganpzh"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-25"},{"lineNumber":277,"author":{"gitId":"keaganpzh"},"content":" data.append(task.formatForFile()).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":278,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":279,"author":{"gitId":"keaganpzh"},"content":" String existingItems \u003d this.storage.readFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":280,"author":{"gitId":"keaganpzh"},"content":" if (!existingItems.contains(data.toString())) {","lastModifiedDate":"2023-09-12"},{"lineNumber":281,"author":{"gitId":"keaganpzh"},"content":" this.storage.addToFile(data.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":282,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":283,"author":{"gitId":"keaganpzh"},"content":" return \"Tasks saved to file. \";","lastModifiedDate":"2023-09-12"},{"lineNumber":284,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":285,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":285}},{"path":"src/main/java/rat/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" private String name;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * The status of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" protected Task(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * Method that changes the status of the task to done.","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" protected void markDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" * Method that changes the status of the task to not done.","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" protected void unmarkDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Returns a String representation of a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * The String representation of a task is its name prefixed by its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * @return A String representation of a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" return status + \" \" + this.name;","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" * Returns a String representation of a task that is used to write to a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * @return The String representation of a task in the format used to write to a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" String status \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" return status + \", \" + this.name;","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":62}},{"path":"src/main/java/rat/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a ToDo task.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a ToDo task.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" protected ToDo(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"[T]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" return taskType + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" return taskType + \", \" + super.formatForFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":29}},{"path":"src/main/resources/view/LeftDialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"\u003cfx:root maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"385.0\" style\u003d\"-fx-background-color: #212121;\" 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":"keaganpzh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"60.0\" fitWidth\u003d\"60.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" style\u003d\"-fx-background-radius: 20;\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel id\u003d\"text-bubble\" fx:id\u003d\"dialog\" contentDisplay\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-padding: 15; -fx-background-color: #ffffff; -fx-background-radius: 20;\" text\u003d\" Sample Text\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel fx:id\u003d\"time\" alignment\u003d\"BOTTOM_LEFT\" contentDisplay\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefWidth\u003d\"30.0\" style\u003d\"-fx-text-fill: white;\" text\u003d\"time\" translateX\u003d\"-5.0\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Light\" size\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":37}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"\u003cAnchorPane style\u003d\"-fx-background-color: #212121;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"rat.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"300.0\" promptText\u003d\"enter a command\" style\u003d\"-fx-background-radius: 20;\" AnchorPane.bottomAnchor\u003d\"5.0\" AnchorPane.leftAnchor\u003d\"8.0\" AnchorPane.rightAnchor\u003d\"82.0\" AnchorPane.topAnchor\u003d\"555.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Light\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"2.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" \u003c/opaqueInsets\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" \u003cButton fx:id\u003d\"sendButton\" alignment\u003d\"BASELINE_CENTER\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"39.0\" prefWidth\u003d\"70.0\" style\u003d\"-fx-background-color: #79a5ed; -fx-background-radius: 20;\" text\u003d\"Send\" textAlignment\u003d\"CENTER\" textFill\u003d\"WHITE\" AnchorPane.bottomAnchor\u003d\"6.0\" AnchorPane.rightAnchor\u003d\"8.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Bold\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" prefHeight\u003d\"553.0\" prefWidth\u003d\"397.0\" style\u003d\"-fx-background-color: #212121;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"395.0\" style\u003d\"-fx-background-color: #212121;\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":30}},{"path":"src/main/resources/view/RightDialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"385.0\" style\u003d\"-fx-background-color: #212121;\" 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":"keaganpzh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel fx:id\u003d\"time\" alignment\u003d\"BOTTOM_RIGHT\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"265.0\" layoutY\u003d\"25.0\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefWidth\u003d\"30.0\" style\u003d\"-fx-text-fill: white;\" text\u003d\"time\" translateX\u003d\"5.0\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Light\" size\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel id\u003d\"text-bubble\" fx:id\u003d\"dialog\" alignment\u003d\"CENTER_RIGHT\" contentDisplay\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-padding: 15; -fx-background-color: #79a5ed; -fx-background-radius: 20;\" text\u003d\" Sample Text\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"60.0\" fitWidth\u003d\"60.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" style\u003d\"-fx-background-radius: 20;\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":35}},{"path":"src/test/java/rat/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class tests the AddCommand class, together with its subclasses.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" protected RatTaskManager rtmTest \u003d new RatTaskManager(new RatStorage(\"testdata/blank.txt\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation and adding of a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" public void testAddToDo() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" AddCommand addTest \u003d new AddCommand(rtmTest, \"todo test\", CommandType.TODO);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" addTest.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"1. [T][ ] test\", rtmTest.toString().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" rtmTest.deleteAll();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation and adding of a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" AddCommand addTest \u003d new AddCommand(rtmTest, \"deadline test /by 01/01/2023 00:00\", CommandType.DEADLINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" addTest.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"1. [D][ ] test (by: Sun, 1 Jan 2023 00:00)\", rtmTest.toString().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" rtmTest.deleteAll();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation and adding of an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" AddCommand addTest \u003d new AddCommand(rtmTest,","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" \"event test /from 01/01/2023 00:00 /to 01/01/2023 01:00\", CommandType.EVENT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" addTest.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"1. [E][ ] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\",","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" rtmTest.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" rtmTest.deleteAll();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":56}},{"path":"src/test/java/rat/command/RatCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * This class tests the methods inside the RatCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * Checks if the validateTime method works as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"public class RatCommandTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * Tests the validateTime method with a valid input.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" public void validateTime_validTime_success() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" assertTrue(RatCommand.validateTime(\"01/01/2020 00:00\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Tests the validateTime method with an invalid input.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" public void validateTime_invalidTime_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" assertFalse(RatCommand.validateTime(\"01 Jan 2023\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertThrows(ParseException.class, () -\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" throw e;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" });","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":44}},{"path":"src/test/java/rat/notes/NoteTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.notes;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"public class NoteTest {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" public void testNote_create() {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" Note noteTest \u003d new Note(\"test\");","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" assertEquals(noteTest.toString(), \"[Note] test\");","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" public void testNote_formatForFile() {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" Note noteTest \u003d new Note(\"test\");","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"N/ test\", noteTest.formatForFile());","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":20}},{"path":"src/test/java/rat/storage/RatStorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * This class tests the RatStorage class.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"public class RatStorageTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * A sample file is used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" protected RatStorage rsTest \u003d new RatStorage(\"testdata/rsTest.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * Tests the overwriteFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * The file is overwritten with an empty String, and the file is checked to be empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" public void testEmpty_isEmpty() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" this.rsTest.overwriteFile(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" assertTrue(rsTest.isFileEmpty());","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Tests the overwriteFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * The file is overwritten with a String, and the file is checked to contain the matching String.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testReadWriteFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" this.rsTest.overwriteFile(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"test\", this.rsTest.readFile().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" * Tests the overwriteFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * The file is overwritten with a String containing multiple lines, and the file is checked to contain","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * the matching String.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void testReadWriteFile_multipleLines() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" this.rsTest.overwriteFile(\"test\\ntest2\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"test\\ntest2\", this.rsTest.readFile().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * Tests the RatStorage class using a bad file path, and checks if an exception is thrown.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" public void testBadFilePath_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" assertThrows(NullPointerException.class, () -\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" new RatStorage(\"badFilePath\");","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" });","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":62}},{"path":"src/test/java/rat/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class tests the Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * Checks if creating, formatting, and updating operations work as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation of a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_create() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" assert (dlTest.toString().equals(\"[D][ ] test (by: Sun, 1 Jan 2023 00:00)\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Tests the formatting of a Deadline task for file storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_formatForFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"D, 0, test, 2023-01-01T00:00\", dlTest.formatForFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the marking of a Deadline task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_markDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" dlTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[D][X] test (by: Sun, 1 Jan 2023 00:00)\", dlTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Tests the unmarking of a Deadline task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_unmarkDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" dlTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" dlTest.unmarkDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[D][ ] test (by: Sun, 1 Jan 2023 00:00)\", dlTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":52}},{"path":"src/test/java/rat/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class tests the Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * Checks if creating, formatting, and updating operations work as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class EventTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation of an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_create() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[E][ ] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\", eTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Tests the formatting of an Event task for file storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_formatForFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"E, 0, test, 2023-01-01T00:00, 2023-01-01T01:00\", eTest.formatForFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the marking of an Event task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_markDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" eTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[E][X] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\", eTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Tests the unmarking of an Event task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_unmarkDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" eTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" eTest.unmarkDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[E][ ] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\", eTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":52}},{"path":"src/test/java/rat/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class tests the ToDo class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * Checks if creating, formatting, and updating operations work as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation of a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_create() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[T][ ] test\", tdTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Tests the formatting of a ToDo task for file storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_formatForFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"T, 0, test\", tdTest.formatForFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the marking of a ToDo task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_markDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" tdTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[T][X] test\", tdTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Tests the unmarking of a ToDo task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_unmarkDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" tdTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" tdTest.unmarkDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[T][ ] test\", tdTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":52}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"note k","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\rat\\*.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":"keaganpzh"},"content":"java -classpath ..\\bin rat.Rat \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":{"keaganpzh":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":"keaganpzh"},"content":"if ! javac -cp ../src/main/java/ -Xlint:none -d ../bin ../src/main/java/rat/*.java","lastModifiedDate":"2023-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":"keaganpzh"},"content":"# delete data file from previous run","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"if [ -e \"./data\" ]","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"then","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" rm -rf ./data","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":"fi","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-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":"keaganpzh"},"content":"java -classpath ../bin rat.Rat \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"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":{"keaganpzh":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":"keaganpzh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-27"},{"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":"keaganpzh"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"keaganpzh"},"content":" mainClass.set(\"rat.RatLauncher\")","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":"keaganpzh"},"content":" archiveBaseName \u003d \"Rat\"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" archiveVersion \u003d \"1.0\"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"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":{"keaganpzh":22,"-":40}},{"path":"data/rat.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"T, 0, this","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"N/ this","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"T, 0, this","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"D, 0, this, 2023-09-19T18:00","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"keaganpzh":4}},{"path":"src/main/java/rat/Rat.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWelcome;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.io.RatInput;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates my version of Duke, called Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * Rat is a chatbot that helps the user keep track of their tasks and notes.","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * @version Week-6","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":"public class Rat {","lastModifiedDate":"2023-08-18"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used to store the user\u0027s tasks in local storage.","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" private static RatStorage ratStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" private static RatTaskManager ratTaskManager;","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" private static RatNoteManager ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * The RatInput Object used to process user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" private static RatInput ratInput;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" * The Scanner object used to read user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" private static Scanner sc;","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-18"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" * The file path of the file to be read from and written to.","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" private static String filePath \u003d \"data/rat.txt\";","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Rat object.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" public Rat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" initialise();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" * Initialises the Rat program.","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a RatTaskManager object, Scanner object, and a RatInput Object.","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" public static void initialise() {","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" printWelcome();","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" ratStorage \u003d new RatStorage(filePath);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" ratTaskManager \u003d new RatTaskManager(ratStorage);","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" ratNoteManager \u003d new RatNoteManager(ratStorage);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" ratInput \u003d new RatInput(sc, ratTaskManager, ratNoteManager);","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" * Returns the response to the user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user\u0027s input generated from respective commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" return ratInput.handleInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" * Returns the welcome message of Rat.","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" * @return The welcome message of Rat.","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" public String getWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" return \"Hello! I\u0027m Rat! What can I do for you? Type \\\"help\\\" to see a list of commands\";","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" * The main method of Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" Rat.initialise();","lastModifiedDate":"2023-08-19"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" ratInput.parseInputs();","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" sc.close();","lastModifiedDate":"2023-08-19"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-18"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-18"}],"authorContributionMap":{"keaganpzh":99}},{"path":"src/main/java/rat/RatLauncher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import rat.gui.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * A launcher class to launch the application with GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public class RatLauncher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Launches the application with GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":19}},{"path":"src/main/java/rat/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that adds a task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class AddCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * The type of task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" private final CommandType commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private final String input;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a AddCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * @param commandType The type of task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" public AddCommand(RatTaskManager ratTaskManager, String input, CommandType commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * Adds a ToDo task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * @param params The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" private String addToDo(String params) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" int todoParamsStart \u003d 5;","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" String todoParams \u003d params.substring(todoParamsStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.addToDo(todoParams);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"To Do name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" return \"To Do name cannot be empty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * Adds a Deadline task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" * @param params The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" private String addDeadline(String params) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" int deadlineParamsStart \u003d 9;","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" int nameIndex \u003d 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" int deadlineIndex \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" String deadlineParams \u003d params.substring(deadlineParamsStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" String[] paramsArr \u003d deadlineParams.split(\" /by \");","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" String name \u003d paramsArr[nameIndex];","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" String deadline \u003d paramsArr[deadlineIndex];","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" validateTime(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.addDeadline(deadline, name);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Deadline name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" return \"Deadline name cannot be empty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid deadline format. Please use \\\"deadline \u003cname\u003e /by \u003cdeadline\u003e\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid deadline format. Please use \\\"deadline \u003cname\u003e /by \u003cdeadline\u003e\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" * Adds an Event task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" * @param params The user input passed from RatInput that contains details of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" private String addEvent(String params) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" int eventParamsStart \u003d 6;","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" params \u003d params.substring(eventParamsStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" String eventName \u003d params.split(\" /from \")[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" if (eventName.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Event name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" return \"Event name cannot be empty\";","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" String[] time \u003d params.split(\" /from \")[1].split(\" /to \");","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" String startTime \u003d time[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" String endTime \u003d time[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" validateTime(startTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" validateTime(endTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" if (startTime.compareTo(endTime) \u003e 0) {","lastModifiedDate":"2023-09-18"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Start time cannot be after end time\");","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" return \"Start time cannot be after end time\";","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.addEvent(startTime, endTime, eventName);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Event name cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" return \"Event name cannot be empty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid event format. Please use \\\"event \u003cname\u003e /from \u003cstart\u003e /to \u003cend\u003e\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid event format. Please use \\\"event \u003cname\u003e /from \u003cstart\u003e /to \u003cend\u003e\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" return \"Invalid date format. Please use \\\"dd/MM/yyyy HH:mm\\\"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" return this.addToDo(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" return this.addDeadline(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" return this.addEvent(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" this.addToDo(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":" this.addDeadline(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"keaganpzh"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"keaganpzh"},"content":" this.addEvent(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":146}},{"path":"src/main/java/rat/command/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This enum encapsulates the different types of commands that Rat can handle.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" MARK, UNMARK, TODO, DEADLINE, EVENT, ADD_NOTE, DELETE_NOTE, INVALID","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":8}},{"path":"src/main/java/rat/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that deletes a task from the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class DeleteCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * The index of the first character of the parameters in the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" private static final int DELETE_PARAMS_START \u003d 7;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains the index of the task to be deleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private String input;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a DeleteCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input passed from RatInput that contains the index of the task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public DeleteCommand(RatTaskManager ratTaskManager, String input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" String param \u003d this.input.substring(DELETE_PARAMS_START);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" if (param.equals(\"all\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.deleteAll();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(param);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.deleteItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"delete\\\" command must be followed by a number\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" return \" \\\"delete\\\" command must be followed by a number\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" String param \u003d this.input.substring(DELETE_PARAMS_START);","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" if (param.equals(\"all\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.deleteAll();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(param);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.deleteItem(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"delete\\\" command must be followed by a number\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":67}},{"path":"src/main/java/rat/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printExit;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that exits the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"public class ExitCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * Constructor for an ExitCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public ExitCommand(RatTaskManager ratTaskManager, RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager, ratNoteManager);","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.save();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager.save();","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" printExit();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager.save();","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" printExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" System.exit(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":38}},{"path":"src/main/java/rat/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a Find command.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * A find command searches the task list for tasks that contain a keyword, and prints the matching tasks to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public class FindCommand extends RatCommand {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * The keyword to search for.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" private String keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a FindCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" public FindCommand(RatTaskManager ratTaskManager, String input) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" int keywordStart \u003d 7;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" this.keyword \u003d input.substring(keywordStart);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.printFoundTasks(this.keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.printFoundTasks(this.keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":36}},{"path":"src/main/java/rat/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that marks a task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class MarkCommand extends ModifyCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * The index of the first character of the parameters in the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" private static final int MARK_PARAMS_START \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains the index of the task to be marked as done.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private String[] inputs;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a MarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param inputs The user input passed from RatInput that contains the index of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public MarkCommand(RatTaskManager ratTaskManager, String... inputs) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" this.inputs \u003d inputs;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[MARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.markItemDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" return \" \\\"mark\\\" command must be followed by a number\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[MARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.markItemDone(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":57}},{"path":"src/main/java/rat/command/ModifyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that modifies the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * A modification is either a marking or unmarking of a task as done/undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public abstract class ModifyCommand extends RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a ModifyCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" public ModifyCommand(RatTaskManager ratTaskManager) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" public abstract String getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":24}},{"path":"src/main/java/rat/command/NoteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that handles the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * This command can add and delete notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"public class NoteCommand extends RatCommand {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * The user input passed into the NoteCommand.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" private final String input;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" * The type of NoteCommand.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * Can be either ADD_NOTE, DELETE_NOTE or INVALID.","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" private final CommandType noteCommandType;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a NoteCommmand Object.","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * Parses the user input and initialises the NoteCommand object.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input passed into the NoteCommand.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" public NoteCommand(RatNoteManager ratNoteManager, String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" super(ratNoteManager);","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" int commandTypeIndex \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" String[] inputs \u003d input.split(\" \");","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" if (inputs.length \u003c 2) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.INVALID;","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" switch (inputs[commandTypeIndex]) {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" case \"/add\":","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.ADD_NOTE;","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" case \"/delete\":","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.DELETE_NOTE;","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" this.noteCommandType \u003d CommandType.INVALID;","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * Adds a note to the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" * Parses the user input to get the note to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note creation, or the reason for an unsuccessful one.","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" public String addNote() {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" int noteAddParamsStart \u003d 10;","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" String noteParams \u003d this.input.substring(noteAddParamsStart);","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.addNote(noteParams);","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" return \"Note cannot be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" * Deletes a note from the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * Parses the user input to get the index of the note to be deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note deletion, or the reason for an unsuccessful one.","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" public String deleteNote() {","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" int noteIndexToDelete \u003d 2;","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" String param \u003d this.input.split(\" \")[noteIndexToDelete];","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" if (param.equals(\"all\")) {","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.deleteAll();","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.deleteNote(Integer.parseInt(param));","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" return \"Note index must be an integer\";","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" return \"Note index must be within the range of the note list\";","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" switch (this.noteCommandType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" case ADD_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" return this.addNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" case DELETE_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" return this.deleteNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" case INVALID:","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" return \"Note command must be of the form: note /add \u003cnote\u003e or note /delete \u003cindex\u003e\";","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" switch (this.noteCommandType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" case ADD_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" this.addNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" case DELETE_NOTE:","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" this.deleteNote();","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Note command must be of the form: note /add \u003cnote\u003e or note /delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":116}},{"path":"src/main/java/rat/command/RatCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the commands that can be executed by Rat.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * Each command has a corresponding \u0027execute\u0027 method that is called by RatInput.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"public abstract class RatCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * This RatTaskManager should be initialised in main.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" protected RatTaskManager ratTaskManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * This RatNoteManager should be initialised in main.","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" protected RatNoteManager ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * This constructor is called when dealing with commands that modify the task list.","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" protected RatCommand(RatTaskManager ratTaskManager) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d ratTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatCommand object.","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * This constructor is called when dealing with commands that modify the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" protected RatCommand(RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatCommand object.","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" * This constructor is called when dealing with commands that modify both the task and note lists.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" * @param ratNoteManager The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" protected RatCommand(RatTaskManager ratTaskManager, RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d ratTaskManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" * Executes the command which modifies the task list.","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" * Able to create, delete, and update tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" * Calls the respective methods to modify the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" * @return The response to be printed to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" public abstract String getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * Validates the time input by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" * @param time The time input by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" * @return True if the time is valid, false otherwise.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" * @throws ParseException If the time is not in the correct format.","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" protected static boolean validateTime(String time) throws ParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" SimpleDateFormat dateFormat \u003d new SimpleDateFormat(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" dateFormat.parse(time.trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":82}},{"path":"src/main/java/rat/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a command that marks a task as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class UnmarkCommand extends ModifyCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * The index of the first character of the parameters in the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" private static final int UNMARK_PARAMS_START \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The user input passed from RatInput that contains the index of the task to be marked as not done.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private String[] inputs;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a UnmarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param inputs The user input passed from RatInput that contains the index of the task to be marked as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public UnmarkCommand(RatTaskManager ratTaskManager, String... inputs) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" super(ratTaskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" this.inputs \u003d inputs;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String getResponse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[UNMARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.unmarkItemDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" return \" \\\"mark\\\" command must be followed by a number\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" int index \u003d Integer.parseInt(inputs[UNMARK_PARAMS_START]);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager.unmarkItemDone(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\" \\\"mark\\\" command must be followed by a number\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"keaganpzh":57}},{"path":"src/main/java/rat/gui/LeftDialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * A custom control component using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"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":17,"author":{"gitId":"keaganpzh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"public class LeftDialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * The label containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * The ImageView to represent the speaker\u0027s face.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" * The label containing the time of the message.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" private Label time;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" * Constructs a DialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" private LeftDialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/LeftDialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" time.setText(LocalTime.now().format(DateTimeFormatter.ofPattern(\"HH:mm\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" * Factory method for creating a LeftDialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" public static LeftDialogBox getRatDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" return new LeftDialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":70}},{"path":"src/main/java/rat/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.Rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * A GUI for Rat using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * This class brings together Rat\u0027s logic and the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The Rat instance to be used by the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" private Rat rat \u003d new Rat();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Starts the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * @param stage the primary stage for this application, onto which the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * Applications may create other stages, if needed, but they will not be primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" stage.setTitle(\"Rat\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setRat(rat);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":43}},{"path":"src/main/java/rat/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.Rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The scroll pane containing the dialog container.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The dialog container containing all the dialog boxes.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * The text field for user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * The button to send user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * The Rat instance.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" private Rat rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * The display image of the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/UserImage.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * The display image of Rat.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" private Image ratImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Megamind.jpeg\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" * Initializes the scroll pane to scroll to the bottom of the dialog container.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" * Sets the Rat instance to be used by the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" * @param rat The Rat instance to be used by the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" public void setRat(Rat rat) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" this.rat \u003d rat;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" assert(rat !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" LeftDialogBox.getRatDialog(rat.getWelcome(), ratImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Rat\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" if (!input.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" String response \u003d rat.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" assert userImage !\u003d null : \"User image should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" assert ratImage !\u003d null : \"Rat image should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" RightDialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" LeftDialogBox.getRatDialog(response, ratImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":95}},{"path":"src/main/java/rat/gui/RightDialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * A custom control component using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"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":17,"author":{"gitId":"keaganpzh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * This dialog box is right-aligned and is used for the user\u0027s messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"public class RightDialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * The label containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * The ImageView to represent the speaker\u0027s face.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" * The label containing the time of the message.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" private Label time;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" * Constructs a RightDialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" private RightDialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/RightDialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" time.setText(LocalTime.now().format(DateTimeFormatter.ofPattern(\"HH:mm\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" * Factory method for creating a RightDialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" * @param text The text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" * @param img The image of the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" public static RightDialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" return new RightDialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":71}},{"path":"src/main/java/rat/io/RatInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.io;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.command.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"import rat.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import rat.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"import rat.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"import rat.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"import rat.command.NoteCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"import rat.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"import rat.notes.RatNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the input handling of Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * RatInput parses user commands and initialises and executes the corresponding command object.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"public class RatInput {","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * The Scanner object used to read user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * This Scanner should be initialised in main.","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" * This RatTaskManager should be initialised in main.","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" private RatTaskManager ratTaskManager;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * The RatNoteManager object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * This RatNoteManager should be initialised in main.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" private RatNoteManager ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * Constructor for RatInput.","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" * @param sc The Scanner object used to read user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * @param ratTaskManager The RatTaskManager object used to store and process the user\u0027s tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" public RatInput(Scanner sc, RatTaskManager ratTaskManager, RatNoteManager ratNoteManager) {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" this.ratTaskManager \u003d ratTaskManager;","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" this.ratNoteManager \u003d ratNoteManager;","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" * Handles scanner input and calls handleInput for each scanner input.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" public void parseInputs() {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" handleInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" * Parses and processes the user input based on a set of commands.","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" * Creates and executes the corresponding command object.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user input, returned by respective commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" public String handleInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" int commandStart \u003d 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" String command \u003d inputArr[commandStart];","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" switch (command) {","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" case \"bye\":","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return new ExitCommand(this.ratTaskManager, this.ratNoteManager).getResponse();","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" case \"list\":","lastModifiedDate":"2023-08-19"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.listItems();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" case \"mark\":","lastModifiedDate":"2023-08-19"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" return new MarkCommand(this.ratTaskManager, inputArr).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-19"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" return new UnmarkCommand(this.ratTaskManager, inputArr).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" case \"todo\":","lastModifiedDate":"2023-08-19"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" return new AddCommand(this.ratTaskManager, input, CommandType.TODO).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-19"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" return new AddCommand(this.ratTaskManager, input, CommandType.DEADLINE).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" case \"event\":","lastModifiedDate":"2023-08-19"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" return new AddCommand(this.ratTaskManager, input, CommandType.EVENT).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" case \"delete\":","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" return new DeleteCommand(this.ratTaskManager, input).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" case \"find\":","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" return new FindCommand(this.ratTaskManager, input).getResponse();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" case \"note\":","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" return new NoteCommand(this.ratNoteManager, input).getResponse();","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" case \"notes\":","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" return this.ratNoteManager.listItems();","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" case \"save\":","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" return this.ratTaskManager.save() + this.ratNoteManager.save();","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" case \"help\":","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" return this.showCommands();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-08-19"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" return \"Sorry, I don\u0027t understand what you mean by \" + input;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" * Returns a String containing a list of commands the user can use.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":" * @return A String containing a list of commands the user can use.","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":" public String showCommands() {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" String output \u003d \"Hello! I\u0027m Rat, your personal task manager.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" + \"Here are the commands you can use:\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" + \"\\nhelp: show this list of commands\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" + \"list: list all tasks\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" + \"mark \u003cindex\u003e: mark task at \u003cindex\u003e as done\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" + \"unmark \u003cindex\u003e: mark task at \u003cindex\u003e as not done\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" + \"todo \u003cname\u003e: add a todo task with \u003cname\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" + \"deadline \u003cname\u003e /by \u003cdeadline\u003e: add a deadline task with \u003cname\u003e and \u003cdeadline\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" + \"event \u003cname\u003e /from \u003cstart\u003e /to \u003cend\u003e: add an event task with \u003cname\u003e, \u003cstart\u003e and \u003cend\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" + \"delete \u003cindex\u003e: delete task at \u003cindex\u003e\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" + \"delete all: delete all tasks\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" + \"find \u003ckeyword\u003e: find all tasks with \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" + \"note /add \u003cbody\u003e: add a note with \u003cbody\u003e\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":" + \"note /delete \u003cindex\u003e: delete note at \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":" + \"notes: list all notes\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" + \"save: save all tasks and notes\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" + \"bye: exit the program\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" + \"\\nbuilt by @keaganpzh\";","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" printWithLines(output);","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":138}},{"path":"src/main/java/rat/io/RatPrinter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.io;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the printing of messages by Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"public class RatPrinter {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Prints the welcome message to the user.","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * The welcome message includes the current local date and time.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" String currentTime \u003d LocalDateTime.now().format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" String welcomeMsg \u003d","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" currentTime + \"\\n\\n Hello! I\u0027m Rat!\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" + \" type \\\"help\\\" to see a list of commands\";","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" printWithLines(welcomeMsg);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * Prints the exit message to the user.","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" public static void printExit() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" String exitMsg \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" printWithLines(exitMsg);","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" * Given a message, formats the message with lines and prints it to the user.","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" * @param msg The message to be printed.","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" public static void printWithLines(String msg) {","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" String output \u003d \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" + msg + \"\\n\"","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\";","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":44}},{"path":"src/main/java/rat/notes/Note.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.notes;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a note.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" * A note is a string of text that the user can add to.","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"public class Note {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * The body of the note.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" private String body;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Note object.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * @param input The body of the note.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" public Note(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" this.body \u003d input;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" return \"[Note] \" + this.body;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * Formats the note for writing to file.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * @return The formatted note.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" return \"N/ \" + this.body;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":37}},{"path":"src/main/java/rat/notes/RatNoteManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.notes;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the logic of handling the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Includes methods to add and delete notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Handles writing to storage.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"public class RatNoteManager {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * The list of notes managed by RatNoteManager, represented as an ArrayList.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private ArrayList\u003cNote\u003e noteList;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private RatStorage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * Constructor for RatNoteManager.","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * Checks if the file is empty, and if not, reads the data from the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Updates Note List with data from file.","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * @param storage The RatStorage object used to store and process the user\u0027s notes.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" public RatNoteManager(RatStorage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" this.noteList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" if (!storage.isFileEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" getDataFromFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * Gets the data from the file and updates the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" protected void getDataFromFile() {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" int noteSymbolIndex \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" int noteBodyIndex \u003d 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" String[] data \u003d storage.readFile().split(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" for (String s : data) {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" String[] noteData \u003d s.split(\"/ \");","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" if (Objects.equals(noteData[noteSymbolIndex], \"N\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" Note note \u003d new Note(noteData[noteBodyIndex]);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" this.noteList.add(note);","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" for (int i \u003d 0; i \u003c noteList.size(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" str.append(i + 1).append(\". \").append(noteList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" * Adds a note to the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" * @param body The body of the note to be added.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note creation.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" public String addNote(String body) {","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" Note note \u003d new Note(body);","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" this.noteList.add(note);","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this note:\\n\" + note + \"\\nNow you have \" + noteList.size()","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" + \" notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" * Deletes a note from the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" * @param index The index of the note to be deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user echoing a successful note deletion.","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" public String deleteNote(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.noteList.size() || index \u003c 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Note not found\");","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" } else if (this.noteList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Note not found\");","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" Note item \u003d this.noteList.get(index - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" assert(item !\u003d null);","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" this.noteList.remove(index - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Noted. I\u0027ve removed this note:\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" + item","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.noteList.size() + \" notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" * Deletes all notes from the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user saying that all notes have been deleted.","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" public String deleteAll() {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" this.noteList.clear();","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Ok. I\u0027ve removed all notes.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":" * Lists all notes in the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user containing the note list.","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" public String listItems() {","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" if (this.noteList.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"You have no notes in the list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" return \"You have no notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" String list \u003d \"Here are the notes in your list:\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" + this + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" + \"You have \" + this.noteList.size() + \" notes in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" printWithLines(list);","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" return list;","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" * Saves the note list to the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" * Checks if the note list is already in the file, and if not, adds it to the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" * @return The response to the user saying that the notes are saved.","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" public String save() {","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":" for (Note note : this.noteList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"keaganpzh"},"content":" data.append(note.formatForFile()).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"keaganpzh"},"content":" String existingItems \u003d this.storage.readFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"keaganpzh"},"content":" if (!existingItems.contains(data.toString())) {","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"keaganpzh"},"content":" this.storage.addToFile(data.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"keaganpzh"},"content":" return \"Notes saved to file.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":147}},{"path":"src/main/java/rat/storage/RatStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the logic of handling the storage of Rat,","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * which includes reading and writing to a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"public class RatStorage {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" * The file path of the file to be read from and written to.","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" private static File ratData;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * Constructor for RatStorage.","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * @param filePath The file path of the file to be read from and written to.","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" public RatStorage(String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" ratData \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" if (!ratData.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" ratData.getParentFile().mkdirs();","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" ratData.createNewFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error initialising RatStorage: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * Checks if the file is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @return True if the file is empty, false otherwise.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" public boolean isFileEmpty() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" return ratData.length() \u003d\u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" * Overwrites the file with the given input.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" * @param input The input to overwrite the file with.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" public void overwriteFile(String input) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" FileWriter fw \u003d new FileWriter(ratData);","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" fw.write(input);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" fw.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error overwriting file: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" * Appends the given input to the end of the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" * @param input The input to append to the end of the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" public void addToFile(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" FileWriter fw \u003d new FileWriter(ratData, true);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" fw.write(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" fw.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error adding to file: \" + e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" * Reads the file and returns its contents as a String.","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" * @return The contents of the file as a String.","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" public String readFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" Scanner sc \u003d new Scanner(ratData);","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" str.append(sc.nextLine()).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" sc.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" return \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"keaganpzh":93}},{"path":"src/main/java/rat/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * A Deadline task is a task with a deadline as a String.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * The deadline of the task, represented by a LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The deadline of the task, represented by a String.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" private String deadlineString;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses a String to represent the deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" * Used during regular runtime of Rat where user enters data from the command line.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" protected Deadline(String deadline, String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" this.deadline \u003d LocalDateTime.parse(deadline, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" this.deadlineString \u003d this.deadline.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses a LocalDateTime object to represent the deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * Used when reading data from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" protected Deadline(LocalDateTime deadline, String name) {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" this.deadlineString \u003d this.deadline.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"[D]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" return taskType + super.toString() + \" (by: \" + this.deadlineString + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"D\";","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" return taskType + \", \" + super.formatForFile() + \", \" + this.deadline.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":61}},{"path":"src/main/java/rat/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates an Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * An Event task is a task with a start time and end time as Strings.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * The start time of the task, represented by a LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" * The end time of the task, represented by a String.","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * The start time of the task, represented by a String.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The date and time is formatted as \"EEE, d MMM yyyy HH:mm\".","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private String startTimeString;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * The end time of the task, represented by a String.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * The date and time is formatted as \"EEE, d MMM yyyy HH:mm\".","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" private String endTimeString;","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" * Constructor for an Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses Strings to represent the start time and end time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" * Used during regular runtime of Rat where user enters data from the command line.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" * @param startTime The start time of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" * @param endTime The end time of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" protected Event(String startTime, String endTime, String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" this.startTime \u003d LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" this.endTime \u003d LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" this.startTimeString \u003d this.startTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" this.endTimeString \u003d this.endTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" * Constructor for an Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * This constructor uses LocalDateTime objects to represent the start time and end time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" * Used when reading data from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * @param startTime The start time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" * @param endTime The end time of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" protected Event(LocalDateTime startTime, LocalDateTime endTime, String name) {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" this.startTimeString \u003d this.startTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" this.endTimeString \u003d this.endTime.format(DateTimeFormatter.ofPattern(\"EEE, d MMM yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"[E]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" return taskType + super.toString() + \" (from: \" + this.startTimeString + \" to: \" + this.endTimeString + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" return taskType + \", \" + super.formatForFile() + \", \"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" + this.startTime.toString() + \", \" + this.endTime.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":80}},{"path":"src/main/java/rat/tasks/RatTaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static rat.io.RatPrinter.printWithLines;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates the taskList of Rat, which is a list of tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * Includes methods to add, modify, and delete tasks.","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * Handles writing to storage.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"public class RatTaskManager {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * The list of tasks managed by RatTaskManager, represented by an ArrayList.","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used to read and write the task list to local storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" private RatStorage storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a RatTaskManager object.","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" * Checks if stored file is empty and reads data from file if it is not.","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Updates taskList with data from file.","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * @param storage The RatStorage object used to read and write the task list to local storage.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" public RatTaskManager(RatStorage storage) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" if (!storage.isFileEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" getDataFromFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * Returns a list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" * @return A list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" public ArrayList\u003cTask\u003e findTasks(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" return foundTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" * Prints a list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":" * @return A String representation of the list of tasks matching a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"keaganpzh"},"content":" public String printFoundTasks(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"keaganpzh"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d this.findTasks(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"keaganpzh"},"content":" if (foundTasks.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"keaganpzh"},"content":" String output \u003d \"No tasks found matching the keyword \" + \"\\\"\" + keyword + \"\\\"\" + \".\";","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"keaganpzh"},"content":" printWithLines(output);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"keaganpzh"},"content":" return output;","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"keaganpzh"},"content":" str.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"keaganpzh"},"content":" for (int i \u003d 0; i \u003c foundTasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"keaganpzh"},"content":" str.append((i + 1)).append(\". \").append(foundTasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"keaganpzh"},"content":" printWithLines(str.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"keaganpzh"},"content":" * Reads the data from the local storage file and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"keaganpzh"},"content":" protected void getDataFromFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"keaganpzh"},"content":" int taskSymbol \u003d 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"keaganpzh"},"content":" int taskStatus \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"keaganpzh"},"content":" int taskName \u003d 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"keaganpzh"},"content":" int firstTime \u003d 3;","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"keaganpzh"},"content":" int secondTime \u003d 4;","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"keaganpzh"},"content":" String[] data \u003d storage.readFile().split(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"keaganpzh"},"content":" for (String s : data) {","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"keaganpzh"},"content":" String[] taskData \u003d s.split(\", \");","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"keaganpzh"},"content":" switch (taskData[taskSymbol]) {","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"keaganpzh"},"content":" case \"T\":","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(new ToDo(taskData[taskName]));","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"keaganpzh"},"content":" case \"D\":","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(new Deadline(LocalDateTime.parse(taskData[firstTime]), taskData[taskName]));","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"keaganpzh"},"content":" case \"E\":","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(new Event(LocalDateTime.parse(taskData[firstTime]),","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"keaganpzh"},"content":" LocalDateTime.parse(taskData[secondTime]), taskData[taskName]));","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"keaganpzh"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"keaganpzh"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"keaganpzh"},"content":" if (taskData[taskStatus].equals(\"1\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"keaganpzh"},"content":" this.markItemDone(this.taskList.size());","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"keaganpzh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"keaganpzh"},"content":" // Do nothing","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":113,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":114,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"keaganpzh"},"content":" * Returns the String representation of RatTaskManager.","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"keaganpzh"},"content":" * The String representation is a numbered list of tasks.","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"keaganpzh"},"content":" * @return String representation of RatTaskManager.","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":122,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":123,"author":{"gitId":"keaganpzh"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"keaganpzh"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"keaganpzh"},"content":" str.append((i + 1)).append(\". \").append(this.taskList.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":127,"author":{"gitId":"keaganpzh"},"content":" return str.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":129,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":130,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":131,"author":{"gitId":"keaganpzh"},"content":" * Adds a ToDo task to the taskList, given its name.","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a new ToDo object and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"keaganpzh"},"content":" * @param item Name of the ToDo task.","lastModifiedDate":"2023-08-21"},{"lineNumber":134,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the ToDo task has been added.","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":136,"author":{"gitId":"keaganpzh"},"content":" public String addToDo(String item) {","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"keaganpzh"},"content":" ToDo newToDo \u003d new ToDo(item);","lastModifiedDate":"2023-08-19"},{"lineNumber":138,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(newToDo);","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this Deadline:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"keaganpzh"},"content":" + newToDo","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":145,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":146,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":148,"author":{"gitId":"keaganpzh"},"content":" * Adds a Deadline task to the taskList, given its deadline and name.","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a new Deadline object and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"keaganpzh"},"content":" * @param deadline Deadline of the Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":151,"author":{"gitId":"keaganpzh"},"content":" * @param name Name of the Deadline task.","lastModifiedDate":"2023-08-21"},{"lineNumber":152,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the Deadline task has been added.","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":154,"author":{"gitId":"keaganpzh"},"content":" public String addDeadline(String deadline, String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"keaganpzh"},"content":" Deadline newDeadline \u003d new Deadline(deadline, name);","lastModifiedDate":"2023-08-19"},{"lineNumber":156,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(newDeadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this Deadline:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"keaganpzh"},"content":" + newDeadline","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":163,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":164,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"keaganpzh"},"content":" * Adds an Event task to the taskList, given its start time, end time, and name.","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"keaganpzh"},"content":" * Instantiates a new Event object and adds it to the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"keaganpzh"},"content":" * @param startTime Start time of the Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":168,"author":{"gitId":"keaganpzh"},"content":" * @param endTime End time of the Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":169,"author":{"gitId":"keaganpzh"},"content":" * @param name Name of the Event task.","lastModifiedDate":"2023-08-21"},{"lineNumber":170,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the Event task has been added.","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":172,"author":{"gitId":"keaganpzh"},"content":" public String addEvent(String startTime, String endTime, String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"keaganpzh"},"content":" Event newEvent \u003d new Event(startTime, endTime, name);","lastModifiedDate":"2023-08-19"},{"lineNumber":174,"author":{"gitId":"keaganpzh"},"content":" this.taskList.add(newEvent);","lastModifiedDate":"2023-08-25"},{"lineNumber":175,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Got it. I\u0027ve added this Event:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"keaganpzh"},"content":" + newEvent","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":181,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":182,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":183,"author":{"gitId":"keaganpzh"},"content":" * Marks a task as done, given its 1-indexed index in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"keaganpzh"},"content":" * @param index Index of the task in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the task has been marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":187,"author":{"gitId":"keaganpzh"},"content":" public String markItemDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":190,"author":{"gitId":"keaganpzh"},"content":" } else if (this.taskList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":192,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":193,"author":{"gitId":"keaganpzh"},"content":" Task item \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":194,"author":{"gitId":"keaganpzh"},"content":" assert (item !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"keaganpzh"},"content":" item.markDone();","lastModifiedDate":"2023-08-19"},{"lineNumber":196,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Nice! I\u0027ve marked this task as done: \" + taskList.get(index - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":200,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":201,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":202,"author":{"gitId":"keaganpzh"},"content":" * Marks a task as not done, given its 1-indexed index in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"keaganpzh"},"content":" * @param index Index of the task in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the task has been marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":206,"author":{"gitId":"keaganpzh"},"content":" public String unmarkItemDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":209,"author":{"gitId":"keaganpzh"},"content":" } else if (this.taskList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":211,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":212,"author":{"gitId":"keaganpzh"},"content":" Task item \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"keaganpzh"},"content":" assert(item !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"keaganpzh"},"content":" item.unmarkDone();","lastModifiedDate":"2023-08-19"},{"lineNumber":215,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Ok, I\u0027ve marked this task as not done yet: \" + taskList.get(index - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":219,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":220,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":221,"author":{"gitId":"keaganpzh"},"content":" * Deletes a task from taskList, given its 1-indexed index in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":222,"author":{"gitId":"keaganpzh"},"content":" * @param index Index of the task in the taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":223,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that the task has been deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":225,"author":{"gitId":"keaganpzh"},"content":" public String deleteItem(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"keaganpzh"},"content":" if (index \u003e this.taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":227,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":228,"author":{"gitId":"keaganpzh"},"content":" } else if (this.taskList.get(index - 1) \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":229,"author":{"gitId":"keaganpzh"},"content":" throw new IndexOutOfBoundsException(\"Task not found\");","lastModifiedDate":"2023-08-19"},{"lineNumber":230,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":231,"author":{"gitId":"keaganpzh"},"content":" Task item \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":232,"author":{"gitId":"keaganpzh"},"content":" assert(item !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":233,"author":{"gitId":"keaganpzh"},"content":" this.taskList.remove(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":234,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":235,"author":{"gitId":"keaganpzh"},"content":" + item.toString()","lastModifiedDate":"2023-08-19"},{"lineNumber":236,"author":{"gitId":"keaganpzh"},"content":" + \"\\nNow you have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":240,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":241,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":242,"author":{"gitId":"keaganpzh"},"content":" * Deletes all tasks from taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":243,"author":{"gitId":"keaganpzh"},"content":" * @return A confirmation that all tasks have been deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":245,"author":{"gitId":"keaganpzh"},"content":" public String deleteAll() {","lastModifiedDate":"2023-09-03"},{"lineNumber":246,"author":{"gitId":"keaganpzh"},"content":" this.taskList.clear();","lastModifiedDate":"2023-08-25"},{"lineNumber":247,"author":{"gitId":"keaganpzh"},"content":" String response \u003d \"Noted. I\u0027ve removed all tasks.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":248,"author":{"gitId":"keaganpzh"},"content":" printWithLines(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"keaganpzh"},"content":" return response;","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":251,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":252,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":253,"author":{"gitId":"keaganpzh"},"content":" * Displays all tasks in taskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":254,"author":{"gitId":"keaganpzh"},"content":" * Formats the taskList\u0027s String representation with a message and count.","lastModifiedDate":"2023-08-25"},{"lineNumber":255,"author":{"gitId":"keaganpzh"},"content":" * @return A String representation of the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":256,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":257,"author":{"gitId":"keaganpzh"},"content":" public String listItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"keaganpzh"},"content":" if (this.taskList.isEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":259,"author":{"gitId":"keaganpzh"},"content":" printWithLines(\"You have no tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":260,"author":{"gitId":"keaganpzh"},"content":" return \"You have no tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"keaganpzh"},"content":" } else {","lastModifiedDate":"2023-08-19"},{"lineNumber":262,"author":{"gitId":"keaganpzh"},"content":" String list \u003d \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-08-19"},{"lineNumber":263,"author":{"gitId":"keaganpzh"},"content":" + this + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":264,"author":{"gitId":"keaganpzh"},"content":" + \"You have \" + this.taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-25"},{"lineNumber":265,"author":{"gitId":"keaganpzh"},"content":" printWithLines(list);","lastModifiedDate":"2023-08-24"},{"lineNumber":266,"author":{"gitId":"keaganpzh"},"content":" return list;","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":268,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":269,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":270,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":271,"author":{"gitId":"keaganpzh"},"content":" * Method that updates local storage after each run of Rat.","lastModifiedDate":"2023-08-25"},{"lineNumber":272,"author":{"gitId":"keaganpzh"},"content":" * Checks if the taskList is already in the file, and if not, adds it to the file.","lastModifiedDate":"2023-09-12"},{"lineNumber":273,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":274,"author":{"gitId":"keaganpzh"},"content":" public String save() {","lastModifiedDate":"2023-09-12"},{"lineNumber":275,"author":{"gitId":"keaganpzh"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":276,"author":{"gitId":"keaganpzh"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-25"},{"lineNumber":277,"author":{"gitId":"keaganpzh"},"content":" data.append(task.formatForFile()).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":278,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":279,"author":{"gitId":"keaganpzh"},"content":" String existingItems \u003d this.storage.readFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":280,"author":{"gitId":"keaganpzh"},"content":" if (!existingItems.contains(data.toString())) {","lastModifiedDate":"2023-09-12"},{"lineNumber":281,"author":{"gitId":"keaganpzh"},"content":" this.storage.addToFile(data.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":282,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":283,"author":{"gitId":"keaganpzh"},"content":" return \"Tasks saved to file. \";","lastModifiedDate":"2023-09-12"},{"lineNumber":284,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":285,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":285}},{"path":"src/main/java/rat/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" private String name;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * The status of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" protected Task(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" * Method that changes the status of the task to done.","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" protected void markDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" * Method that changes the status of the task to not done.","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" protected void unmarkDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Returns a String representation of a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * The String representation of a task is its name prefixed by its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" * @return A String representation of a task.","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" return status + \" \" + this.name;","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" * Returns a String representation of a task that is used to write to a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" * @return The String representation of a task in the format used to write to a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" String status \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" return status + \", \" + this.name;","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":62}},{"path":"src/main/java/rat/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":" * This class encapsulates a ToDo task.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * Constructor for a ToDo task.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" protected ToDo(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"[T]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" return taskType + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" public String formatForFile() {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" String taskType \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" return taskType + \", \" + super.formatForFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"keaganpzh":29}},{"path":"src/main/resources/view/LeftDialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"\u003cfx:root maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"385.0\" style\u003d\"-fx-background-color: #212121;\" 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":"keaganpzh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"60.0\" fitWidth\u003d\"60.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" style\u003d\"-fx-background-radius: 20;\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel id\u003d\"text-bubble\" fx:id\u003d\"dialog\" contentDisplay\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-padding: 15; -fx-background-color: #ffffff; -fx-background-radius: 20;\" text\u003d\" Sample Text\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel fx:id\u003d\"time\" alignment\u003d\"BOTTOM_LEFT\" contentDisplay\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefWidth\u003d\"30.0\" style\u003d\"-fx-text-fill: white;\" text\u003d\"time\" translateX\u003d\"-5.0\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Light\" size\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":37}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"\u003cAnchorPane style\u003d\"-fx-background-color: #212121;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"rat.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"300.0\" promptText\u003d\"enter a command\" style\u003d\"-fx-background-radius: 20;\" AnchorPane.bottomAnchor\u003d\"5.0\" AnchorPane.leftAnchor\u003d\"8.0\" AnchorPane.rightAnchor\u003d\"82.0\" AnchorPane.topAnchor\u003d\"555.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Light\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"2.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" \u003c/opaqueInsets\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" \u003cButton fx:id\u003d\"sendButton\" alignment\u003d\"BASELINE_CENTER\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"39.0\" prefWidth\u003d\"70.0\" style\u003d\"-fx-background-color: #79a5ed; -fx-background-radius: 20;\" text\u003d\"Send\" textAlignment\u003d\"CENTER\" textFill\u003d\"WHITE\" AnchorPane.bottomAnchor\u003d\"6.0\" AnchorPane.rightAnchor\u003d\"8.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Bold\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" prefHeight\u003d\"553.0\" prefWidth\u003d\"397.0\" style\u003d\"-fx-background-color: #212121;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"395.0\" style\u003d\"-fx-background-color: #212121;\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":30}},{"path":"src/main/resources/view/RightDialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"385.0\" style\u003d\"-fx-background-color: #212121;\" 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":"keaganpzh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel fx:id\u003d\"time\" alignment\u003d\"BOTTOM_RIGHT\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"265.0\" layoutY\u003d\"25.0\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefWidth\u003d\"30.0\" style\u003d\"-fx-text-fill: white;\" text\u003d\"time\" translateX\u003d\"5.0\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Light\" size\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" \u003cLabel id\u003d\"text-bubble\" fx:id\u003d\"dialog\" alignment\u003d\"CENTER_RIGHT\" contentDisplay\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-padding: 15; -fx-background-color: #79a5ed; -fx-background-radius: 20;\" text\u003d\" Sample Text\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" \u003cFont name\u003d\"SF Pro Display Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"60.0\" fitWidth\u003d\"60.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" style\u003d\"-fx-background-radius: 20;\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"keaganpzh":35}},{"path":"src/test/java/rat/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import rat.storage.RatStorage;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import rat.tasks.RatTaskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * This class tests the AddCommand class, together with its subclasses.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * The RatTaskManager object used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" protected RatTaskManager rtmTest \u003d new RatTaskManager(new RatStorage(\"testdata/blank.txt\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation and adding of a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" public void testAddToDo() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" AddCommand addTest \u003d new AddCommand(rtmTest, \"todo test\", CommandType.TODO);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" addTest.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"1. [T][ ] test\", rtmTest.toString().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" rtmTest.deleteAll();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation and adding of a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" AddCommand addTest \u003d new AddCommand(rtmTest, \"deadline test /by 01/01/2023 00:00\", CommandType.DEADLINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" addTest.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"1. [D][ ] test (by: Sun, 1 Jan 2023 00:00)\", rtmTest.toString().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" rtmTest.deleteAll();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation and adding of an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" AddCommand addTest \u003d new AddCommand(rtmTest,","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" \"event test /from 01/01/2023 00:00 /to 01/01/2023 01:00\", CommandType.EVENT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" addTest.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"1. [E][ ] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\",","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" rtmTest.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" rtmTest.deleteAll();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":56}},{"path":"src/test/java/rat/command/RatCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" * This class tests the methods inside the RatCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" * Checks if the validateTime method works as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":"public class RatCommandTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" * Tests the validateTime method with a valid input.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" public void validateTime_validTime_success() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" assertTrue(RatCommand.validateTime(\"01/01/2020 00:00\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Tests the validateTime method with an invalid input.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" public void validateTime_invalidTime_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" assertFalse(RatCommand.validateTime(\"01 Jan 2023\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertThrows(ParseException.class, () -\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" throw e;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" });","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":44}},{"path":"src/test/java/rat/notes/NoteTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.notes;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"public class NoteTest {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" public void testNote_create() {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" Note noteTest \u003d new Note(\"test\");","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" assertEquals(noteTest.toString(), \"[Note] test\");","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" public void testNote_formatForFile() {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" Note noteTest \u003d new Note(\"test\");","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"N/ test\", noteTest.formatForFile());","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":20}},{"path":"src/test/java/rat/storage/RatStorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * This class tests the RatStorage class.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"public class RatStorageTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" * The RatStorage object used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" * A sample file is used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" protected RatStorage rsTest \u003d new RatStorage(\"testdata/rsTest.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":" * Tests the overwriteFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" * The file is overwritten with an empty String, and the file is checked to be empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" public void testEmpty_isEmpty() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" this.rsTest.overwriteFile(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" assertTrue(rsTest.isFileEmpty());","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" * Tests the overwriteFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * The file is overwritten with a String, and the file is checked to contain the matching String.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testReadWriteFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" this.rsTest.overwriteFile(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"test\", this.rsTest.readFile().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" * Tests the overwriteFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * The file is overwritten with a String containing multiple lines, and the file is checked to contain","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" * the matching String.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" public void testReadWriteFile_multipleLines() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" this.rsTest.overwriteFile(\"test\\ntest2\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"test\\ntest2\", this.rsTest.readFile().trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"keaganpzh"},"content":" * Tests the RatStorage class using a bad file path, and checks if an exception is thrown.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"keaganpzh"},"content":" public void testBadFilePath_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"keaganpzh"},"content":" assertThrows(NullPointerException.class, () -\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"keaganpzh"},"content":" new RatStorage(\"badFilePath\");","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"keaganpzh"},"content":" });","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":62}},{"path":"src/test/java/rat/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class tests the Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * Checks if creating, formatting, and updating operations work as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation of a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_create() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" assert (dlTest.toString().equals(\"[D][ ] test (by: Sun, 1 Jan 2023 00:00)\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Tests the formatting of a Deadline task for file storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_formatForFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"D, 0, test, 2023-01-01T00:00\", dlTest.formatForFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the marking of a Deadline task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_markDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" dlTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[D][X] test (by: Sun, 1 Jan 2023 00:00)\", dlTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Tests the unmarking of a Deadline task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" public void testDeadline_unmarkDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" Deadline dlTest \u003d new Deadline(\"01/01/2023 00:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" dlTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" dlTest.unmarkDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[D][ ] test (by: Sun, 1 Jan 2023 00:00)\", dlTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":52}},{"path":"src/test/java/rat/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class tests the Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * Checks if creating, formatting, and updating operations work as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class EventTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation of an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_create() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[E][ ] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\", eTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Tests the formatting of an Event task for file storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_formatForFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"E, 0, test, 2023-01-01T00:00, 2023-01-01T01:00\", eTest.formatForFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the marking of an Event task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_markDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" eTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[E][X] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\", eTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Tests the unmarking of an Event task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" public void testEvent_unmarkDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" Event eTest \u003d new Event(\"01/01/2023 00:00\", \"01/01/2023 01:00\", \"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" eTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" eTest.unmarkDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[E][ ] test (from: Sun, 1 Jan 2023 00:00 to: Sun, 1 Jan 2023 01:00)\", eTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":52}},{"path":"src/test/java/rat/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"package rat.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"keaganpzh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"keaganpzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"keaganpzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"keaganpzh"},"content":" * This class tests the ToDo class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"keaganpzh"},"content":" * Checks if creating, formatting, and updating operations work as intended.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":" * @author Keagan","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"keaganpzh"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"keaganpzh"},"content":" * Tests the creation of a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_create() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[T][ ] test\", tdTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":" * Tests the formatting of a ToDo task for file storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_formatForFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"T, 0, test\", tdTest.formatForFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"keaganpzh"},"content":" * Tests the marking of a ToDo task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_markDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"keaganpzh"},"content":" tdTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[T][X] test\", tdTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"keaganpzh"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"keaganpzh"},"content":" * Tests the unmarking of a ToDo task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"keaganpzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"keaganpzh"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"keaganpzh"},"content":" public void testToDo_unmarkDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"keaganpzh"},"content":" ToDo tdTest \u003d new ToDo(\"test\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"keaganpzh"},"content":" tdTest.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"keaganpzh"},"content":" tdTest.unmarkDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"keaganpzh"},"content":" assertEquals(\"[T][ ] test\", tdTest.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"keaganpzh"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"keaganpzh"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"keaganpzh":52}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"keaganpzh"},"content":"note k","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"keaganpzh":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"keaganpzh"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\rat\\*.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":"keaganpzh"},"content":"java -classpath ..\\bin rat.Rat \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":{"keaganpzh":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":"keaganpzh"},"content":"if ! javac -cp ../src/main/java/ -Xlint:none -d ../bin ../src/main/java/rat/*.java","lastModifiedDate":"2023-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":"keaganpzh"},"content":"# delete data file from previous run","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"keaganpzh"},"content":"if [ -e \"./data\" ]","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"keaganpzh"},"content":"then","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"keaganpzh"},"content":" rm -rf ./data","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"keaganpzh"},"content":"fi","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"keaganpzh"},"content":"","lastModifiedDate":"2023-08-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":"keaganpzh"},"content":"java -classpath ../bin rat.Rat \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"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":{"keaganpzh":8,"-":36}}] diff --git a/keaganpzh_ip_master/commits.json b/keaganpzh_ip_master/commits.json index 8d1b2525..8a557de8 100644 --- a/keaganpzh_ip_master/commits.json +++ b/keaganpzh_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"keaganpzh":[{"date":"2023-08-18","commitResults":[{"hash":"7d57e81b60867da3bee3d8c8335e9ce37bf04011","isMergeCommit":false,"messageTitle":"feat: Renamed bot, implemented greeting and exit message.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2023-08-19","commitResults":[{"hash":"7f8847ed73aec9427cb66735d4cabcc14d141ddb","isMergeCommit":false,"messageTitle":"fix: edit test files to match new class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"7844b2d1b020c93db01e194381903ba29231168e","isMergeCommit":false,"messageTitle":"refactor: created new class to handle console printing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":10}}},{"hash":"d80f08c728a62f7f5c971060a5a228691307da0c","isMergeCommit":false,"messageTitle":"feat: echo feature using Java.util.Scanner","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5d16e7b9332cd854a625ad755e22dbb6d3762b9f","isMergeCommit":false,"messageTitle":"feat: Level-2: created classes for storage and task and handle inputs accordingly","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":14}}},{"hash":"029f5a21b5e691a870f6eaf1b8766bc5359cf308","isMergeCommit":false,"messageTitle":"feat: Level-3 -\u003e able to mark tasks; new class to handle scanner inputs","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":16}}},{"hash":"568c2532f3acfb611cbd06f2640a35f877438d7a","isMergeCommit":false,"messageTitle":"feat: Level-4 -\u003e created task subclasses and handled inputs","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":162,"deletions":59}}},{"hash":"eb99c575904098e58ef56b0d4d01235109e177ce","isMergeCommit":false,"messageTitle":"test: A-TextUiTesting -\u003e Created input.txt and expected","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":5,"deletions":6}}},{"hash":"2d6f5957dbef6d1ad0a3c75b9fba5f861cd1ecc9","isMergeCommit":false,"messageTitle":"fix: github actions (fr this time)","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":0}}},{"hash":"4c9d4e44f44313318a015ce14437fbcac536a4f8","isMergeCommit":false,"messageTitle":"feat: Level-5 -\u003e Error handling when handling inputs implemented.","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":97,"deletions":36}}},{"hash":"040bda9dcdb2dc2c35f73ea96ae48a31bcb5c0be","isMergeCommit":false,"messageTitle":"feat: Level-6 -\u003e Implemented Deletions for Tasks.","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":26,"deletions":0}}}]},{"date":"2023-08-20","commitResults":[{"hash":"d04ee00daecccc5de52c36fa2ba4f8f58cea1243","isMergeCommit":false,"messageTitle":"feat: added \"delete all\" and \"help\" command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"951b488e1e1e30456ffa80d8c18f46603f1a5623","isMergeCommit":false,"messageTitle":"feat: added \"delete all\" and \"help\" commands and functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":5}}},{"hash":"c0eeb7821ef3b9cb450371c99e923690e9aeb67e","isMergeCommit":false,"messageTitle":"fix: removed color for text for test compatibility","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":34}}}]},{"date":"2023-08-21","commitResults":[{"hash":"6872b42edc4a1770a27fb22c5cc0836c8a2e3053","isMergeCommit":false,"messageTitle":"fix: Input handler handles system exit instead of throwing exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":24}}},{"hash":"52aa1454331121e3ea4d364f0dfca33a68cfb083","isMergeCommit":false,"messageTitle":"docs: add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":238,"deletions":9}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e857b7053534898021cfe60b74a51bac1513e970","isMergeCommit":false,"messageTitle":"refactor: used static imports for UI printer methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":63}}}]},{"date":"2023-08-25","commitResults":[{"hash":"b43e90a43ef3790960caf0620056267969c8c945","isMergeCommit":false,"messageTitle":"refactor: package names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":48},"bat":{"insertions":1,"deletions":1}}},{"hash":"4a69200fca32d75abe3b25ba6f3e2696259566d3","isMergeCommit":false,"messageTitle":"fix: update test files to reflect change in package structure","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2}}},{"hash":"5b1004dbdaec266897dfbc3f008d0099bd877507","isMergeCommit":false,"messageTitle":"feat: able to format data and write to storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":166,"deletions":64}}},{"hash":"576caea3e8ad349c320c1234cd5a9eee43dd2ddf","isMergeCommit":false,"messageTitle":"feat: Level-7 -\u003e Able to read from file on startup","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":63,"deletions":5},"sh":{"insertions":6,"deletions":0}}},{"hash":"b1114610ea93c00345b501ded709801f83b5254d","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-7\u0027 to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"36b29c80e59f79a5368fbe331b9af09083488f7d","isMergeCommit":false,"messageTitle":"feat: Level-8 -\u003e Dates are now stored as java.time.LocalDateTime objects","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":59,"deletions":21}}},{"hash":"b6d32478755ba4e17fb384da6e3192093b2e58a3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 into master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"9c6c5cbf2789c2c5c8d6696b3d7536fd52356a6d","isMergeCommit":false,"messageTitle":"A-MoreOOP: separate commands into classes","messageBody":"","tags":["A-Packages","A-MoreOOP","A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":239,"deletions":140}}},{"hash":"5b01eec7c950ac9d33c5872c6af8826b5fa8bfcc","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c41ba81b3b59e4ba9ffcde8531457a71a97d73c7","isMergeCommit":false,"messageTitle":"A-Gradle: Setup gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"txt":{"insertions":0,"deletions":3}}},{"hash":"73efff740398159c68618e8fc16d6119a1c7b969","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027 into master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"ae77eb2ecf7346a88b838632fbd6647fb7d053df","isMergeCommit":false,"messageTitle":"A-JUnit: create testcases for Rat. automate with gradle","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":5}}},{"hash":"2aa3d41c8647ae083559ff81cbf7d18fe12e2406","isMergeCommit":false,"messageTitle":"A-Jar: build Rat.jar with gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"f694d53dea9a46d2180f0e4617cb75f8ec4428d5","isMergeCommit":false,"messageTitle":"Level-9: add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"27d5711acb97e09ada2d0b04c223bba639ca2b1a","isMergeCommit":false,"messageTitle":"Level-9: add JavaDoc for FindCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"a9e6e2ee15c19288ad61f4d615d0cc5c95dbec5b","isMergeCommit":false,"messageTitle":"A-JavaDoc: add JavaDoc for all files under src/main/java/rat/","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":5}}},{"hash":"d3699d34f4503997a3218254d5165a5aba1c35ce","isMergeCommit":false,"messageTitle":"A-CodingStandard: follow CS2103T coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":12}}},{"hash":"ac1f27f94183c3421cc88be46422f9bb33718ac0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f87d89fcf5d79bed289edc5005c295a10037dbe5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 into master","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"f7685a1591e50ddd28e8d4598e554f77f44192ed","isMergeCommit":false,"messageTitle":"A-CheckStyle: setup checkstyle for gradle and fixed style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":2},"java":{"insertions":39,"deletions":18}}},{"hash":"b3067e86fc41fe1f8e20b433823ff9b8ea6c4562","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 into master","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"faf1f7714fdd75a97286fc7ea22410e02b9af64f","isMergeCommit":false,"messageTitle":"Refactor: refactored commands in preparation for GUI implementation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":167,"deletions":66}}}]},{"date":"2023-09-04","commitResults":[{"hash":"40d63c71d5ef155741397583e64835bf147edc9d","isMergeCommit":false,"messageTitle":"Level-10: Create JavaFX GUI for Rat","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"fxml":{"insertions":65,"deletions":0},"java":{"insertions":204,"deletions":0}}},{"hash":"8f0f573c33c46584fc08be4fa89c73d4f4717d9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2f2261f765927ac1099a4b66df8b0f2970105ce5","isMergeCommit":false,"messageTitle":"refactor JavaDocs and DialogBox","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":38,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":333,"deletions":155}}},{"hash":"8bfa441ca464d1d0b6d84c977277d5a6083ae5fc","isMergeCommit":false,"messageTitle":"A-Varargs: update methods to support varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-08","commitResults":[{"hash":"84722a89e6e05a7bb8d54d8011efe117e6fe92e9","isMergeCommit":false,"messageTitle":"fix: update build.gradle to support jfx packaging","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"java":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-11","commitResults":[{"hash":"af2537c28791acaf976eff56ddbb347265ae79b5","isMergeCommit":false,"messageTitle":"Add Java Assertions","messageBody":"There are no assertions implemented at this point in time. There may be\ncases where methods are called on null objects.\n\nImplement assertions at rat.gui.MainWindow and rat.tasks.RatTaskManager.\n\nAssertions are a good way to document important assumptions that should\nhold true at certain points of the code.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"5d9cb7e75a785cd12284d03c3076c36bafc8f893","isMergeCommit":true,"messageTitle":"Merge pull request #1 from keaganpzh/branch-A-Assertions","messageBody":"PR to merge branch-A-Assertions to master","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2aaf9d3c16dd2863c518f6d2c6002ed2f2726f5d","isMergeCommit":false,"messageTitle":"Refactor to improve code quality","messageBody":"Several violations of code quality were found throughout the code, which\nimpacts readability and safety.\n\nRemove \u0027magic numbers\u0027, introduce new variables to avoid reassigned\nparameters\n\nTo follow the coding standards provided by the course.\n","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":23}}},{"hash":"8c440db6ad7ad003cb1c844432493d4ddf50124f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from keaganpzh/branch-A-CodeQuality","messageBody":"PR to merge branch-A-CodeQuality into master","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"6681584c4f307a981d7929cccaf554f2eb40e38a","isMergeCommit":false,"messageTitle":"refactor: fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":37}}},{"hash":"841fb3b7daeeec0c21f3a8a60a1291ac33214b05","isMergeCommit":true,"messageTitle":"Merge pull request #3 from keaganpzh/branch-A-CI","messageBody":"PR to merge branch-A-CI intoto master","tags":["A-CI"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"1e68204ca009c969db09854ad50ed03cacdd1740","isMergeCommit":false,"messageTitle":"Feature: D-Notes","messageBody":"Implemented a new feature of the extension D-Notes. Rat can now track\nuser notes.\n\nCreate new class to handle creation and deletion of notes. Implement new\ntestcases to test note functions.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":17},"java":{"insertions":414,"deletions":14}}},{"hash":"d578b0d7006ee3aba1b03f2cb482737d21fc73b6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from keaganpzh/branch-D-Notes","messageBody":"PR to merge branch-D-Notes into master","tags":["BCD-Extensions"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"keaganpzh":{"java":2333,"md":0,"fxml":102,"sh":8,"bat":2,"gradle":22,"txt":3}},"authorContributionVariance":{"keaganpzh":56923.15},"authorDisplayNameMap":{"keaganpzh":"CS2103T-F11-2 KEAG.. HON"}} +{"authorDailyContributionsMap":{"keaganpzh":[{"date":"2023-08-18","commitResults":[{"hash":"7d57e81b60867da3bee3d8c8335e9ce37bf04011","isMergeCommit":false,"messageTitle":"feat: Renamed bot, implemented greeting and exit message.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2023-08-19","commitResults":[{"hash":"7f8847ed73aec9427cb66735d4cabcc14d141ddb","isMergeCommit":false,"messageTitle":"fix: edit test files to match new class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"7844b2d1b020c93db01e194381903ba29231168e","isMergeCommit":false,"messageTitle":"refactor: created new class to handle console printing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":10}}},{"hash":"d80f08c728a62f7f5c971060a5a228691307da0c","isMergeCommit":false,"messageTitle":"feat: echo feature using Java.util.Scanner","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5d16e7b9332cd854a625ad755e22dbb6d3762b9f","isMergeCommit":false,"messageTitle":"feat: Level-2: created classes for storage and task and handle inputs accordingly","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":14}}},{"hash":"029f5a21b5e691a870f6eaf1b8766bc5359cf308","isMergeCommit":false,"messageTitle":"feat: Level-3 -\u003e able to mark tasks; new class to handle scanner inputs","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":16}}},{"hash":"568c2532f3acfb611cbd06f2640a35f877438d7a","isMergeCommit":false,"messageTitle":"feat: Level-4 -\u003e created task subclasses and handled inputs","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":162,"deletions":59}}},{"hash":"eb99c575904098e58ef56b0d4d01235109e177ce","isMergeCommit":false,"messageTitle":"test: A-TextUiTesting -\u003e Created input.txt and expected","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":5,"deletions":6}}},{"hash":"2d6f5957dbef6d1ad0a3c75b9fba5f861cd1ecc9","isMergeCommit":false,"messageTitle":"fix: github actions (fr this time)","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":0}}},{"hash":"4c9d4e44f44313318a015ce14437fbcac536a4f8","isMergeCommit":false,"messageTitle":"feat: Level-5 -\u003e Error handling when handling inputs implemented.","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":97,"deletions":36}}},{"hash":"040bda9dcdb2dc2c35f73ea96ae48a31bcb5c0be","isMergeCommit":false,"messageTitle":"feat: Level-6 -\u003e Implemented Deletions for Tasks.","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":26,"deletions":0}}}]},{"date":"2023-08-20","commitResults":[{"hash":"d04ee00daecccc5de52c36fa2ba4f8f58cea1243","isMergeCommit":false,"messageTitle":"feat: added \"delete all\" and \"help\" command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"951b488e1e1e30456ffa80d8c18f46603f1a5623","isMergeCommit":false,"messageTitle":"feat: added \"delete all\" and \"help\" commands and functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":5}}},{"hash":"c0eeb7821ef3b9cb450371c99e923690e9aeb67e","isMergeCommit":false,"messageTitle":"fix: removed color for text for test compatibility","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":34}}}]},{"date":"2023-08-21","commitResults":[{"hash":"6872b42edc4a1770a27fb22c5cc0836c8a2e3053","isMergeCommit":false,"messageTitle":"fix: Input handler handles system exit instead of throwing exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":24}}},{"hash":"52aa1454331121e3ea4d364f0dfca33a68cfb083","isMergeCommit":false,"messageTitle":"docs: add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":238,"deletions":9}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e857b7053534898021cfe60b74a51bac1513e970","isMergeCommit":false,"messageTitle":"refactor: used static imports for UI printer methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":63}}}]},{"date":"2023-08-25","commitResults":[{"hash":"b43e90a43ef3790960caf0620056267969c8c945","isMergeCommit":false,"messageTitle":"refactor: package names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":48},"bat":{"insertions":1,"deletions":1}}},{"hash":"4a69200fca32d75abe3b25ba6f3e2696259566d3","isMergeCommit":false,"messageTitle":"fix: update test files to reflect change in package structure","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2}}},{"hash":"5b1004dbdaec266897dfbc3f008d0099bd877507","isMergeCommit":false,"messageTitle":"feat: able to format data and write to storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":166,"deletions":64}}},{"hash":"576caea3e8ad349c320c1234cd5a9eee43dd2ddf","isMergeCommit":false,"messageTitle":"feat: Level-7 -\u003e Able to read from file on startup","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":63,"deletions":5},"sh":{"insertions":6,"deletions":0}}},{"hash":"b1114610ea93c00345b501ded709801f83b5254d","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-7\u0027 to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"36b29c80e59f79a5368fbe331b9af09083488f7d","isMergeCommit":false,"messageTitle":"feat: Level-8 -\u003e Dates are now stored as java.time.LocalDateTime objects","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":59,"deletions":21}}},{"hash":"b6d32478755ba4e17fb384da6e3192093b2e58a3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 into master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"9c6c5cbf2789c2c5c8d6696b3d7536fd52356a6d","isMergeCommit":false,"messageTitle":"A-MoreOOP: separate commands into classes","messageBody":"","tags":["A-Packages","A-MoreOOP","A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":239,"deletions":140}}},{"hash":"5b01eec7c950ac9d33c5872c6af8826b5fa8bfcc","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c41ba81b3b59e4ba9ffcde8531457a71a97d73c7","isMergeCommit":false,"messageTitle":"A-Gradle: Setup gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"txt":{"insertions":0,"deletions":3}}},{"hash":"73efff740398159c68618e8fc16d6119a1c7b969","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027 into master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"ae77eb2ecf7346a88b838632fbd6647fb7d053df","isMergeCommit":false,"messageTitle":"A-JUnit: create testcases for Rat. automate with gradle","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":5}}},{"hash":"2aa3d41c8647ae083559ff81cbf7d18fe12e2406","isMergeCommit":false,"messageTitle":"A-Jar: build Rat.jar with gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"f694d53dea9a46d2180f0e4617cb75f8ec4428d5","isMergeCommit":false,"messageTitle":"Level-9: add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"27d5711acb97e09ada2d0b04c223bba639ca2b1a","isMergeCommit":false,"messageTitle":"Level-9: add JavaDoc for FindCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"a9e6e2ee15c19288ad61f4d615d0cc5c95dbec5b","isMergeCommit":false,"messageTitle":"A-JavaDoc: add JavaDoc for all files under src/main/java/rat/","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":5}}},{"hash":"d3699d34f4503997a3218254d5165a5aba1c35ce","isMergeCommit":false,"messageTitle":"A-CodingStandard: follow CS2103T coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":12}}},{"hash":"ac1f27f94183c3421cc88be46422f9bb33718ac0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f87d89fcf5d79bed289edc5005c295a10037dbe5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 into master","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"f7685a1591e50ddd28e8d4598e554f77f44192ed","isMergeCommit":false,"messageTitle":"A-CheckStyle: setup checkstyle for gradle and fixed style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":2},"java":{"insertions":39,"deletions":18}}},{"hash":"b3067e86fc41fe1f8e20b433823ff9b8ea6c4562","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 into master","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"faf1f7714fdd75a97286fc7ea22410e02b9af64f","isMergeCommit":false,"messageTitle":"Refactor: refactored commands in preparation for GUI implementation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":167,"deletions":66}}}]},{"date":"2023-09-04","commitResults":[{"hash":"40d63c71d5ef155741397583e64835bf147edc9d","isMergeCommit":false,"messageTitle":"Level-10: Create JavaFX GUI for Rat","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"fxml":{"insertions":65,"deletions":0},"java":{"insertions":204,"deletions":0}}},{"hash":"8f0f573c33c46584fc08be4fa89c73d4f4717d9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2f2261f765927ac1099a4b66df8b0f2970105ce5","isMergeCommit":false,"messageTitle":"refactor JavaDocs and DialogBox","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":38,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":333,"deletions":155}}},{"hash":"8bfa441ca464d1d0b6d84c977277d5a6083ae5fc","isMergeCommit":false,"messageTitle":"A-Varargs: update methods to support varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-08","commitResults":[{"hash":"84722a89e6e05a7bb8d54d8011efe117e6fe92e9","isMergeCommit":false,"messageTitle":"fix: update build.gradle to support jfx packaging","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"java":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-11","commitResults":[{"hash":"af2537c28791acaf976eff56ddbb347265ae79b5","isMergeCommit":false,"messageTitle":"Add Java Assertions","messageBody":"There are no assertions implemented at this point in time. There may be\ncases where methods are called on null objects.\n\nImplement assertions at rat.gui.MainWindow and rat.tasks.RatTaskManager.\n\nAssertions are a good way to document important assumptions that should\nhold true at certain points of the code.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"5d9cb7e75a785cd12284d03c3076c36bafc8f893","isMergeCommit":true,"messageTitle":"Merge pull request #1 from keaganpzh/branch-A-Assertions","messageBody":"PR to merge branch-A-Assertions to master","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2aaf9d3c16dd2863c518f6d2c6002ed2f2726f5d","isMergeCommit":false,"messageTitle":"Refactor to improve code quality","messageBody":"Several violations of code quality were found throughout the code, which\nimpacts readability and safety.\n\nRemove \u0027magic numbers\u0027, introduce new variables to avoid reassigned\nparameters\n\nTo follow the coding standards provided by the course.\n","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":23}}},{"hash":"8c440db6ad7ad003cb1c844432493d4ddf50124f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from keaganpzh/branch-A-CodeQuality","messageBody":"PR to merge branch-A-CodeQuality into master","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"6681584c4f307a981d7929cccaf554f2eb40e38a","isMergeCommit":false,"messageTitle":"refactor: fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":37}}},{"hash":"841fb3b7daeeec0c21f3a8a60a1291ac33214b05","isMergeCommit":true,"messageTitle":"Merge pull request #3 from keaganpzh/branch-A-CI","messageBody":"PR to merge branch-A-CI intoto master","tags":["A-CI"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"1e68204ca009c969db09854ad50ed03cacdd1740","isMergeCommit":false,"messageTitle":"Feature: D-Notes","messageBody":"Implemented a new feature of the extension D-Notes. Rat can now track\nuser notes.\n\nCreate new class to handle creation and deletion of notes. Implement new\ntestcases to test note functions.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":17},"java":{"insertions":414,"deletions":14}}},{"hash":"d578b0d7006ee3aba1b03f2cb482737d21fc73b6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from keaganpzh/branch-D-Notes","messageBody":"PR to merge branch-D-Notes into master","tags":["BCD-Extensions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"ce48f534b25d6b3f233be005ece84fec975544be","isMergeCommit":false,"messageTitle":"A-MoreErrorHandling: validate time for events such that end time \u003e start time","messageBody":"","tags":["A-MoreErrorHandling"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"keaganpzh":{"java":2342,"md":0,"fxml":102,"sh":8,"bat":2,"gradle":22,"txt":5}},"authorContributionVariance":{"keaganpzh":50394.2},"authorDisplayNameMap":{"keaganpzh":"CS2103T-F11-2 KEAG.. HON"}} diff --git a/laurenlim2112_ip_master/commits.json b/laurenlim2112_ip_master/commits.json index ada1b554..5f790ed8 100644 --- a/laurenlim2112_ip_master/commits.json +++ b/laurenlim2112_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"laurenlim2112":[{"date":"2023-08-18","commitResults":[{"hash":"4dfc6a871ddd52ce16e7f742d0c8c2a6cbb9fb8a","isMergeCommit":false,"messageTitle":"Duke.java: rename chatbot, implement skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}}]},{"date":"2023-08-20","commitResults":[{"hash":"08880a12c305dc124502a1db875d9af7618950c1","isMergeCommit":false,"messageTitle":"Duke.java: echoes user commmands, exits on \u0027bye\u0027 command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"26982dec8f75989317e294068ebf1ccb905fb3c2","isMergeCommit":false,"messageTitle":"Duke.java: store and list tasks added by user","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"dc30400306dfb42444bab243eb3aa236d49eeaec","isMergeCommit":false,"messageTitle":"Add Task class to represent tasks and ability to mark as done/not done","messageBody":"","tags":["Level-3","A-Collections","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":13}}},{"hash":"70a7e9d55b384899c8db3cdfa6f3cbe7493f0f3f","isMergeCommit":false,"messageTitle":"Support tracking 3 task types","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":14}}},{"hash":"46fd71518c5095a11f3370066accea29d711c384","isMergeCommit":false,"messageTitle":"Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":40,"deletions":37}}},{"hash":"76a53be452ee5e2c1960a4ec57446a2a0eae478e","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":30}}},{"hash":"2519437a1d9333cadc6c5de04ab07b4f73457488","isMergeCommit":false,"messageTitle":"Add support for task deletion","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":16}}},{"hash":"d312cf7c6cdcacd6d7ed0b5477a33b968ba11aca","isMergeCommit":false,"messageTitle":"Further improve error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}}]},{"date":"2023-08-26","commitResults":[{"hash":"04274fa4fba3fa1a3c436bc8c97449329be7edaa","isMergeCommit":false,"messageTitle":"Implement Level 7: Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":367,"deletions":158}}},{"hash":"39e7a89df2118ead8f19a6c1bc7d02c9579c5979","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ad7514aeda8fa179b0f2127fd5b19d6e296df250","isMergeCommit":false,"messageTitle":"Add the ability to understand dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":81}}},{"hash":"eda1a76b2f57337d6105345a562df0df882ffcda","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"65f29ac3f05248511b1714997fb4a16104b50321","isMergeCommit":false,"messageTitle":"Extract closely-related code as classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":514,"deletions":333}}},{"hash":"cc89242f47c12437dd441683d51a686bbfb90842","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"ea9fcdae2082b0ae0f49b2bda23a57fe0a745667","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":6}}},{"hash":"4bee5db368c1c5a872eeb7eb8710178c25e0c4f9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"2b0a5ea8256540869d9e7049c6078f0ab27bc20d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b8ba61b329f391f6490c0f7a6d3552447b645567","isMergeCommit":false,"messageTitle":"Test commit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0},"txt":{"insertions":7,"deletions":1}}},{"hash":"fc7603cb454b37abce9adb76c32c0f09fc1c3345","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/laurenlim2112/ip","messageBody":"# Conflicts:\n#\tgradlew\n#\tgradlew.bat\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"37845a6a91481639e7604bd4c538ec5c861ac8e7","isMergeCommit":false,"messageTitle":"Add JUnit tests to test the behaviour of the code.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":0,"deletions":2},"java":{"insertions":141,"deletions":16}}},{"hash":"013679612eee2ebf6e2663add60bbd0e713123b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5602d94ebee96894d9cbf8dbe0129a7619169360","isMergeCommit":false,"messageTitle":"Package the app as an executable JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"f142ba1b628f2a695020e6809d73a06e1b170fec","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":470,"deletions":8}}},{"hash":"8e785c7596a248a24f22a8bdf2cf5fa6c3f4327c","isMergeCommit":false,"messageTitle":"Tweak the code to comply with the given coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":27,"deletions":27}}},{"hash":"8f5f00abea4909ab21a05eca8a16f8614504ef0c","isMergeCommit":false,"messageTitle":"Add task-searching feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":13}}},{"hash":"f74e794dd728a5607a07e9f91698879a6c6d2b1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f3390b60c1334cbc236805ab63498c41a5a60d8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/spot/Storage.java\n#\tsrc/main/java/spot/exception/SpotException.java\n","fileTypesAndContributionMap":{}},{"hash":"ab11e4ce8a52687604fb39d5f2c07cbdaf9f64d8","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"107a8920cc3d517930ae2eb35830a94f0aa4f6b7","isMergeCommit":false,"messageTitle":"Further tweak code to comply with coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":5}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9a2bc1aed68f0868b20c7dfcfdeb0a4f811d0521","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot using JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"txt":{"insertions":4,"deletions":4},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":293,"deletions":94}}},{"hash":"cdb75b2d765d6cde377ea44f76ea3ffab5173264","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"de7355083491514c565452303835aa61b859a25a","isMergeCommit":false,"messageTitle":"Fix coding style violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-09","commitResults":[{"hash":"122d66932488001fcc7c58668e3d29ce2a3af5d1","isMergeCommit":false,"messageTitle":"Use asserts to document assumptions that should hold in the code","messageBody":"Various assumptions are made at several points in the code.\n\nHowever, these assumptions may not always hold.\n\nLet\u0027s use Java assertions to check if these assumptions do indeed hold.\n\nTheir impact on performance is worth the additional safety provided.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":3,"deletions":5},"java":{"insertions":17,"deletions":4}}},{"hash":"fc7df1ea4e59188ebb5488996ec545b56029f487","isMergeCommit":true,"messageTitle":"Merge pull request #1 from laurenlim2112/branch-A-Assertions","messageBody":"Use asserts to document assumptions that should hold in the code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"cfd6672d58469dc55c79eeab1381d0fe4f8e8701","isMergeCommit":false,"messageTitle":"Improve the code quality where necessary","messageBody":"There are several areas where code quality is low, such as long methods.\n\nThis decreases readability of code.\n\nLet\u0027s refactor the code where necessary to improve overall code quality.\n\nRefactoring will improve the program\u0027s internal structure\nin small steps, without affecting its behaviour.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":208,"deletions":104}}},{"hash":"09480ed3b786776d3df4e8c37e96633e00388f38","isMergeCommit":true,"messageTitle":"Merge pull request #2 from laurenlim2112/branch-A-CodeQuality","messageBody":"Improve the code quality where necessary","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"60cc3f5fb11d9e26819ddf03e4d16a542131dea9","isMergeCommit":false,"messageTitle":"Add support for editing details of tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":518,"deletions":26}}},{"hash":"1e5a2100655272685f52a648a7e04bfdf2b05f60","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"3c9b55018e217d2150c9bce64ed6d64fc1782419","isMergeCommit":false,"messageTitle":"Improve readability of Parser code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":123,"deletions":70}}},{"hash":"0deb9376ffb17529e14730eac36585aa52f29d27","isMergeCommit":false,"messageTitle":"Reduce repetitiveness of code in task-listing methods in TaskList","messageBody":"","tags":["A-Streams","A-Personality","A-MoreErrorHandling","A-Lambdas"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":38,"deletions":36}}},{"hash":"bb802bc8ee77ab4712748a0ce1afb74e873acc00","isMergeCommit":false,"messageTitle":"Add JavaDocs as needed","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":21,"deletions":9}}}]},{"date":"2023-09-17","commitResults":[{"hash":"181dc53ac5ff7e218de57a44228aebdc0b2675bf","isMergeCommit":false,"messageTitle":"Add a User Guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"md":{"insertions":120,"deletions":16}}},{"hash":"ad1530ae232b8d9746e347e6f03598965c92341e","isMergeCommit":false,"messageTitle":"Update JUnit tests to reflect new error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"d563da18dc16aca6cb35183a1741239553886e41","isMergeCommit":false,"messageTitle":"Update User Guide","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"md":{"insertions":4,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"laurenlim2112":{"java":2401,"md":112,"fxml":36,"sh":0,"bat":0,"gradle":22,"txt":3}},"authorContributionVariance":{"laurenlim2112":94125.8},"authorDisplayNameMap":{"laurenlim2112":"CS2103T-W13-2 LAUR..XING"}} +{"authorDailyContributionsMap":{"laurenlim2112":[{"date":"2023-08-18","commitResults":[{"hash":"4dfc6a871ddd52ce16e7f742d0c8c2a6cbb9fb8a","isMergeCommit":false,"messageTitle":"Duke.java: rename chatbot, implement skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}}]},{"date":"2023-08-20","commitResults":[{"hash":"08880a12c305dc124502a1db875d9af7618950c1","isMergeCommit":false,"messageTitle":"Duke.java: echoes user commmands, exits on \u0027bye\u0027 command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"26982dec8f75989317e294068ebf1ccb905fb3c2","isMergeCommit":false,"messageTitle":"Duke.java: store and list tasks added by user","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"dc30400306dfb42444bab243eb3aa236d49eeaec","isMergeCommit":false,"messageTitle":"Add Task class to represent tasks and ability to mark as done/not done","messageBody":"","tags":["Level-3","A-Collections","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":13}}},{"hash":"70a7e9d55b384899c8db3cdfa6f3cbe7493f0f3f","isMergeCommit":false,"messageTitle":"Support tracking 3 task types","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":14}}},{"hash":"46fd71518c5095a11f3370066accea29d711c384","isMergeCommit":false,"messageTitle":"Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":40,"deletions":37}}},{"hash":"76a53be452ee5e2c1960a4ec57446a2a0eae478e","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":30}}},{"hash":"2519437a1d9333cadc6c5de04ab07b4f73457488","isMergeCommit":false,"messageTitle":"Add support for task deletion","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":16}}},{"hash":"d312cf7c6cdcacd6d7ed0b5477a33b968ba11aca","isMergeCommit":false,"messageTitle":"Further improve error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}}]},{"date":"2023-08-26","commitResults":[{"hash":"04274fa4fba3fa1a3c436bc8c97449329be7edaa","isMergeCommit":false,"messageTitle":"Implement Level 7: Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":367,"deletions":158}}},{"hash":"39e7a89df2118ead8f19a6c1bc7d02c9579c5979","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ad7514aeda8fa179b0f2127fd5b19d6e296df250","isMergeCommit":false,"messageTitle":"Add the ability to understand dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":81}}},{"hash":"eda1a76b2f57337d6105345a562df0df882ffcda","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"65f29ac3f05248511b1714997fb4a16104b50321","isMergeCommit":false,"messageTitle":"Extract closely-related code as classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":514,"deletions":333}}},{"hash":"cc89242f47c12437dd441683d51a686bbfb90842","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"ea9fcdae2082b0ae0f49b2bda23a57fe0a745667","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":6}}},{"hash":"4bee5db368c1c5a872eeb7eb8710178c25e0c4f9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"2b0a5ea8256540869d9e7049c6078f0ab27bc20d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b8ba61b329f391f6490c0f7a6d3552447b645567","isMergeCommit":false,"messageTitle":"Test commit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0},"txt":{"insertions":7,"deletions":1}}},{"hash":"fc7603cb454b37abce9adb76c32c0f09fc1c3345","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/laurenlim2112/ip","messageBody":"# Conflicts:\n#\tgradlew\n#\tgradlew.bat\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"37845a6a91481639e7604bd4c538ec5c861ac8e7","isMergeCommit":false,"messageTitle":"Add JUnit tests to test the behaviour of the code.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":0,"deletions":2},"java":{"insertions":141,"deletions":16}}},{"hash":"013679612eee2ebf6e2663add60bbd0e713123b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5602d94ebee96894d9cbf8dbe0129a7619169360","isMergeCommit":false,"messageTitle":"Package the app as an executable JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"f142ba1b628f2a695020e6809d73a06e1b170fec","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":470,"deletions":8}}},{"hash":"8e785c7596a248a24f22a8bdf2cf5fa6c3f4327c","isMergeCommit":false,"messageTitle":"Tweak the code to comply with the given coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":27,"deletions":27}}},{"hash":"8f5f00abea4909ab21a05eca8a16f8614504ef0c","isMergeCommit":false,"messageTitle":"Add task-searching feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":13}}},{"hash":"f74e794dd728a5607a07e9f91698879a6c6d2b1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f3390b60c1334cbc236805ab63498c41a5a60d8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/spot/Storage.java\n#\tsrc/main/java/spot/exception/SpotException.java\n","fileTypesAndContributionMap":{}},{"hash":"ab11e4ce8a52687604fb39d5f2c07cbdaf9f64d8","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"107a8920cc3d517930ae2eb35830a94f0aa4f6b7","isMergeCommit":false,"messageTitle":"Further tweak code to comply with coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":5}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9a2bc1aed68f0868b20c7dfcfdeb0a4f811d0521","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot using JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"txt":{"insertions":4,"deletions":4},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":293,"deletions":94}}},{"hash":"cdb75b2d765d6cde377ea44f76ea3ffab5173264","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"de7355083491514c565452303835aa61b859a25a","isMergeCommit":false,"messageTitle":"Fix coding style violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-09","commitResults":[{"hash":"122d66932488001fcc7c58668e3d29ce2a3af5d1","isMergeCommit":false,"messageTitle":"Use asserts to document assumptions that should hold in the code","messageBody":"Various assumptions are made at several points in the code.\n\nHowever, these assumptions may not always hold.\n\nLet\u0027s use Java assertions to check if these assumptions do indeed hold.\n\nTheir impact on performance is worth the additional safety provided.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":3,"deletions":5},"java":{"insertions":17,"deletions":4}}},{"hash":"fc7df1ea4e59188ebb5488996ec545b56029f487","isMergeCommit":true,"messageTitle":"Merge pull request #1 from laurenlim2112/branch-A-Assertions","messageBody":"Use asserts to document assumptions that should hold in the code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"cfd6672d58469dc55c79eeab1381d0fe4f8e8701","isMergeCommit":false,"messageTitle":"Improve the code quality where necessary","messageBody":"There are several areas where code quality is low, such as long methods.\n\nThis decreases readability of code.\n\nLet\u0027s refactor the code where necessary to improve overall code quality.\n\nRefactoring will improve the program\u0027s internal structure\nin small steps, without affecting its behaviour.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":208,"deletions":104}}},{"hash":"09480ed3b786776d3df4e8c37e96633e00388f38","isMergeCommit":true,"messageTitle":"Merge pull request #2 from laurenlim2112/branch-A-CodeQuality","messageBody":"Improve the code quality where necessary","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"60cc3f5fb11d9e26819ddf03e4d16a542131dea9","isMergeCommit":false,"messageTitle":"Add support for editing details of tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":518,"deletions":26}}},{"hash":"1e5a2100655272685f52a648a7e04bfdf2b05f60","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"3c9b55018e217d2150c9bce64ed6d64fc1782419","isMergeCommit":false,"messageTitle":"Improve readability of Parser code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":123,"deletions":70}}},{"hash":"0deb9376ffb17529e14730eac36585aa52f29d27","isMergeCommit":false,"messageTitle":"Reduce repetitiveness of code in task-listing methods in TaskList","messageBody":"","tags":["A-Streams","A-Personality","A-MoreErrorHandling","A-Lambdas"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":38,"deletions":36}}},{"hash":"bb802bc8ee77ab4712748a0ce1afb74e873acc00","isMergeCommit":false,"messageTitle":"Add JavaDocs as needed","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":21,"deletions":9}}}]},{"date":"2023-09-17","commitResults":[{"hash":"181dc53ac5ff7e218de57a44228aebdc0b2675bf","isMergeCommit":false,"messageTitle":"Add a User Guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"md":{"insertions":120,"deletions":16}}},{"hash":"ad1530ae232b8d9746e347e6f03598965c92341e","isMergeCommit":false,"messageTitle":"Update JUnit tests to reflect new error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"d563da18dc16aca6cb35183a1741239553886e41","isMergeCommit":false,"messageTitle":"Update User Guide","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"md":{"insertions":4,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"laurenlim2112":{"java":2401,"md":112,"fxml":36,"sh":0,"bat":0,"gradle":22,"txt":3}},"authorContributionVariance":{"laurenlim2112":94125.8},"authorDisplayNameMap":{"laurenlim2112":"CS2103T-W13-2 LAUR..XING"}} diff --git a/nreHieW_ip_master/authorship.json b/nreHieW_ip_master/authorship.json index cb958b6a..9f8a0e65 100644 --- a/nreHieW_ip_master/authorship.json +++ b/nreHieW_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"# James project template","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _James_. Given below are instructions on how to use it.","lastModifiedDate":"2023-09-04"},{"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":"nreHieW"},"content":"3. After that, locate the `src/main/java/james/Duke.java` file, right-click it, and choose `Run James.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":4,"-":13}},{"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":"nreHieW"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"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":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" mainClass.set(\"app.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":"nreHieW"},"content":" archiveFileName \u003d \u0027james.jar\u0027","lastModifiedDate":"2023-08-28"},{"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"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":"checkstyle {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":24,"-":38}},{"path":"src/main/java/app/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * A custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * and a label containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" // add padding between image and text and below the dialog box","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" dialog.setStyle(\"-fx-padding: 10 10 10 10;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" * Sets the background color of the dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" * @param color The color to set the background to.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" public void setBackgroundColor(String color) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" this.setStyle(\"-fx-background-color: \" + color + \"; -fx-padding: 10 0 0 0;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * Returns a DialogBox with the user\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" * @param text The text to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" * @param img The image to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" * @return A DialogBox with the user\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" DialogBox box \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" box.setBackgroundColor(\"#e6f2ff\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" return box;","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" * Returns a DialogBox with the bot\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" * @param text The text to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" * @param img The image to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" * @return A DialogBox with the bot\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" db.setBackgroundColor(\"#e6ffe6\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":90}},{"path":"src/main/java/app/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":12}},{"path":"src/main/java/app/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import james.James;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" * A GUI for James using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" private James james \u003d new James();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJames(james);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":31}},{"path":"src/main/java/app/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"import james.James;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" private James james \u003d new James();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" private Image bot \u003d new Image(this.getClass().getResourceAsStream(\"/images/bot.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" DialogBox.getBotDialog(james.getWelcomeMessage(), bot)","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" * Sets the James object.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" * @param d The James object.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" public void setJames(James d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" james \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" DialogBox.getUserDialog(input, user),","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" DialogBox.getBotDialog(response, bot)","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * Returns the response from bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" String output \u003d this.james.processInput(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":71}},{"path":"src/main/java/james/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" * The time of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" private LocalDateTime time;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * Creates a new DeadlineTask with the given description and time.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" * @param timeInput The time of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" public DeadlineTask(String description, String timeInput) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" assert timeInput !\u003d null : \"timeInput should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" String[] possibleFormats \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" \"yyyy/MM/dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" \"dd/MM/yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" for (String format : possibleFormats) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" this.time \u003d LocalDateTime.parse(timeInput, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" continue;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" if (this.time \u003d\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" throw new DateTimeParseException(\"Invalid date format\", timeInput, 0);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" * Returns the string representation of the DeadlineTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" * @return The string representation of the DeadlineTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" + this.time.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":55}},{"path":"src/main/java/james/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" * Represents an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" /** The start time of the event */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" /** The end time of the event */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" * Constructor for EventTask","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" * @param startTimeInput The start time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" * @param endTimeInput The end time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" public EventTask(String description, String startTimeInput, String endTimeInput) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" assert startTimeInput !\u003d null : \"startTimeInput should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" assert endTimeInput !\u003d null : \"endTimeInput should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" String[] possibleFormats \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" \"yyyy/MM/dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" \"dd/MM/yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" for (String format : possibleFormats) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" this.startTime \u003d LocalDateTime.parse(startTimeInput, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" this.endTime \u003d LocalDateTime.parse(endTimeInput, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" continue;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" if (this.startTime \u003d\u003d null || this.endTime \u003d\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" throw new DateTimeParseException(\"Invalid date format\", startTimeInput, 0);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" * Returns the start time and end time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" * @return The string representation of the start time and end time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" + \" to: \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":61}},{"path":"src/main/java/james/James.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" * James is a personal assistant chatbot that helps a person to keep track of various things.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"public class James {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" /** Handles loading and saving to hard disk */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" /** Stores the tasks. */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" /** Handles user interaction. */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" * Creates a James object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" public James() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" String savePath \u003d \"data/James.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" Storage storage \u003d new Storage(savePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" ArrayList\u003cTask\u003e tasks \u003d storage.load();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" this.tasks \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" } catch (LoadingException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" new James().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" * Starts the James program.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" public void run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" ui.start(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" this.storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" } catch (SavingException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Error saving file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" * Processes the user input and returns the outpu from the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" * @return The output from the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" public String processInput(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" assert input !\u003d null : \"input should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" String output \u003d this.ui.processInput(this.tasks, input);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" if (output \u003d\u003d \"Bye. Hope to see you again soon!\") {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" this.storage.save(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" } catch (SavingException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Error saving file\");","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" public String getWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" return \"Hello! I\u0027m James\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":80}},{"path":"src/main/java/james/JamesException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents a JamesException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class JamesException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" * Constructor for JamesException.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" public JamesException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":15}},{"path":"src/main/java/james/LoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents an exception that occurs when loading from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class LoadingException extends JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Constructs a new LoadingException with the specified detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" public LoadingException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":16}},{"path":"src/main/java/james/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Parser class to parse user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Enum to represent the type of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" EVENT","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" private static String sadFace \u003d \"\\u2639\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" private static String line \u003d \"___________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" * Parses the user input and returns a Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" * @param input User input.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" * @return Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" * @throws JamesException If the user input is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" public Task parseTask(String input) throws JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" Parser.TaskType taskType \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" if (input.contains(\"todo\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" taskType \u003d Parser.TaskType.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" } else if (input.contains(\"deadline\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" taskType \u003d Parser.TaskType.DEADLINE;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" } else if (input.contains(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" taskType \u003d Parser.TaskType.EVENT;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" if (taskType \u003d\u003d Parser.TaskType.TODO) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" String[] description \u003d input.split(\"todo \");","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" if (description.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" task \u003d new ToDoTask(description[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.DEADLINE) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" String[] parsed \u003d input.split(\"deadline \");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" if (parsed.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" String[] param \u003d parsed[1].split(\" /by \");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" if (param.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The time of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" String description \u003d param[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" String time \u003d param[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" task \u003d new DeadlineTask(description, time);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.EVENT) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" String[] parsed \u003d input.split(\"event \")[1].split(\" /from \");","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" if (parsed.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" String description \u003d parsed[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" String[] params \u003d parsed[1].split(\" /to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" if (params.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The time of a event cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" String startTime \u003d params[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" String endTime \u003d params[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" task \u003d new EventTask(description, startTime, endTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" return task;","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" * Parses the user input and prints the corresponding output.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" * @param tasks TaskList object.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" * @param input User input.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":" public String parse(TaskList tasks, String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" String[] inputParts \u003d input.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" String command \u003d inputParts[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" Integer taskIdx;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":" switch (command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Here are the tasks in your list:\\n\" + tasks;","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":" taskIdx \u003d Integer.parseInt(inputParts[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":" tasks.unmarkTask(taskIdx - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"OK! I\u0027ve marked this task as not done yet:\\n\" + tasks.getTask(taskIdx - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":" taskIdx \u003d Integer.parseInt(inputParts[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":" tasks.markTask(taskIdx - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Nice! I\u0027ve marked this task as done:\\n\" + tasks.getTask(taskIdx - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":" taskIdx \u003d Integer.parseInt(inputParts[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Noted. I\u0027ve removed this task:\\n\" + tasks.getTask(taskIdx - 1)","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":" + \"\\nNow you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":" tasks.deleteTask(taskIdx - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":" String keyword \u003d inputParts[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Here are the matching tasks in your list:\\n\" + tasks.find(keyword);","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"nreHieW"},"content":" Task task \u003d parseTask(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"nreHieW"},"content":" boolean isAdded \u003d tasks.addTask(task);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"nreHieW"},"content":" if (!isAdded) {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The task is already in the list.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\" + line + \"\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"nreHieW"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"nreHieW"},"content":" } catch (JamesException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"nreHieW"},"content":" output +\u003d e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":134}},{"path":"src/main/java/james/SavingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents an exception that occurs during saving.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class SavingException extends JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Constructs a new SavingException with the specified detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" public SavingException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":16}},{"path":"src/main/java/james/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Storage class to handle saving and loading of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" /** The path to the save file */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" private String savePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" /** The save file */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" private File saveFile;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * Constructor for Storage","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" * Creates the save file if it does not exist","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" * @param path The path to the save file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" this.savePath \u003d path;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" String directory \u003d path.substring(0, path.lastIndexOf(\"/\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" File dir \u003d new File(directory);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" dir.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" this.saveFile \u003d file;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"An error occurred when initializing: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" * Saves the task list to the save file","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" * @param taskList The task list to save","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" * @throws SavingException If an error occurs when saving","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" public void save(TaskList taskList) throws SavingException {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" FileWriter writer \u003d new FileWriter(this.saveFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" writer.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" writer.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" throw new SavingException(\"An error occurred when saving: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" * Loads the task list from the save file","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * @return An ArrayList of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" * @throws LoadingException If an error occurs when loading","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" public ArrayList\u003cTask\u003e load() throws LoadingException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" Scanner reader \u003d new Scanner(this.saveFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" Task task \u003d loadTask(data);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" reader.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" } catch (java.io.FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" throw new LoadingException(\"An error occurred when loading: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" * Loads a task from a string","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":" * @param s The string to load from","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":" * @return Task","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":" public Task loadTask(String s) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":" Character taskType \u003d s.charAt(1); // T, D, E","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":" Boolean isDone \u003d s.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":" String description \u003d s.substring(7);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":" if (taskType \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":" // example [T][X] read book","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":" task \u003d new ToDoTask(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nreHieW"},"content":" // example [D][X] return book (by: Aug 06 2022 14:00)","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":" String[] params \u003d description.split(\"\\\\(by: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":" String time \u003d params[1].substring(0, params[1].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":" task \u003d new DeadlineTask(params[0], time);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":" // example [E][ ] project meeting (from: Aug 06 2022 14:00 to: Aug 06 2022 18:00)","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":" String[] params \u003d description.split(\"\\\\(from: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":" String startTime \u003d description.split(\"from: \")[1].split(\" to: \")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":" String endTime \u003d description.split(\"to: \")[1].substring(0,","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":" description.split(\"to: \")[1].length() - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":" task \u003d new EventTask(params[0], startTime, endTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":" task.mark();","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":" return task;","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":116}},{"path":"src/main/java/james/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Task class to represent a task","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" /** The status of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" * Constructor for Task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * @param description A description of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" * Returns the description of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" * @return String","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" String status \u003d getStatusIcon();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" return \"[\" + status + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" * Returns the status icon of the task if its done","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" * @return String","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" /** Marks the task as done **/","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" public void mark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" /** Unmarks the task as done **/","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" public void unmark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":53}},{"path":"src/main/java/james/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":" * TaskList class to handle the list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" /** The parser to parse the user input */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" /** The list of tasks */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" private ArrayList\u003cTask\u003e items \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * Constructor for TaskList from existing list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * @param items the list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" public TaskList(ArrayList\u003cTask\u003e items) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" this.items \u003d items;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" * Constructor for TaskList from scratch","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" this.items \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" * Unmarks the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" * @param idx the index of the task to be unmarked","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" public void unmarkTask(Integer idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" task.unmark();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" * Marks the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" * @param idx the index of the task to be marked","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" public void markTask(Integer idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" task.mark();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" * Deletes the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" * @param idx the index of the task to be deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" public void deleteTask(Integer idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" this.items.remove(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" * Adds a task to the list","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * @param task the task to be added","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" * @return true if the task is added successfully, false otherwise","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" // check for duplicates","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" for (Task item : this.items) {","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" if (item.toString().equals(task.toString())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" this.items.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" * Find the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" return this.items.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":" * Gets the list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":" * @return all the tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":" return this.items;","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":" * Gets the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":" * @param index the index of the task to be retrieved","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":" * @return the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":" return this.items.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":" * Finds the tasks that contain the query string","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":" * @param query the query string","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":" * @return the string representation of the tasks that contain the query string","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":" public String find(String query) {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c this.items.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"nreHieW"},"content":" if (task.toString().contains(query)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"nreHieW"},"content":" output +\u003d (count + 1) + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"nreHieW"},"content":" count++;","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"nreHieW"},"content":" // remove the last \\n","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"nreHieW"},"content":" if (output.length() \u003e 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"nreHieW"},"content":" output \u003d output.substring(0, output.length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"nreHieW"},"content":" * Returns the string representation of the task list","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nreHieW"},"content":" * @return the string representation of the task list","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"nreHieW"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c this.items.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"nreHieW"},"content":" output +\u003d (i + 1) + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"nreHieW"},"content":" // remove the last \\n","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"nreHieW"},"content":" if (output.length() \u003e 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"nreHieW"},"content":" output \u003d output.substring(0, output.length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":148}},{"path":"src/main/java/james/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents a ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Constructor for ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" * @param description Description of the ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" public ToDoTask(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * Returns a string representation of the ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" * @return String representation of the ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":24}},{"path":"src/main/java/james/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":" * Represents the user interface of the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" private static String line \u003d \"_________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" * The parser used to parse user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" private Parser parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" * Prints the error message when the file cannot be loaded.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Error loading file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" * Starts the program and takes in user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" public void start(TaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" System.out.println(line + \"\\n\" + \"Hello! I\u0027m James\\n + What can I do for you?\\n\" + line);","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" String input \u003d in.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" String output \u003d this.parser.parse(tasks, input);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" input \u003d in.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Bye. Hope to see you again soon!\\n\" + line);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" public String processInput(TaskList tasks, String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" return this.parser.parse(tasks, input);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":55}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"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\"app.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"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":"nreHieW"},"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":"nreHieW"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":19}},{"path":"src/test/java/james/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" public void checkTaskParsing() throws JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" String[] taskInputs \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" \"todo read book\",","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" \"deadline return book /by 2019-12-01 20:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" \"event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" \"todo join sports club\",","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" \"todo borrow book\"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" String[] taskOutputs \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" \"[T][ ] read book\",","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" \"[D][ ] return book (by: Dec 01 2019 20:00)\",","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" \"[E][ ] project meeting (from: Aug 06 2022 14:00 to: Aug 06 2022 18:00)\",","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" \"[T][ ] join sports club\",","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" \"[T][ ] borrow book\"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c taskInputs.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" Task task \u003d parser.parseTask(taskInputs[i]);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" assertEquals(task.toString(), taskOutputs[i]);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" public void checkParsing() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" String[] taskInputs \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" \"todo read book\",","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" \"deadline return book /by 2019-12-01 20:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" \"event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" \"todo join sports club\",","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" \"todo borrow book\"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c taskInputs.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" parser.parse(taskList, taskInputs[i]);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" assertEquals(taskList.size(), taskInputs.length);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":54}},{"path":"src/test/java/james/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" String[] stubs \u003d {\"stub1\", \"stub2\", \"stub3\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" for (String stub : stubs) {","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" taskList.addTask(new ToDoTask(stub));","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" assertEquals(taskList.size(), stubs.length);","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" public void testTaskString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" String[] stubs \u003d {\"stub1\", \"stub2\", \"stub3\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" for (String stub : stubs) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" taskList.addTask(new ToDoTask(stub));","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c stubs.length; i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" assertEquals(taskList.getTask(i).toString(), \"[T][ ] \" + stubs[i]);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"deadline return book /by 2019-12-01 20:00","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"todo join sports club","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"deadline return book /by 2019-12-02 21:00","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"event project meeting /from 2023-01-02 09:00 /to 2023-01-02 16:00","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":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":"nreHieW"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/james/*.java","lastModifiedDate":"2023-09-04"},{"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":"nreHieW"},"content":"java -classpath ../bin James \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":"-"},"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":{"nreHieW":2,"-":36}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"# James project template","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _James_. Given below are instructions on how to use it.","lastModifiedDate":"2023-09-04"},{"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":"nreHieW"},"content":"3. After that, locate the `src/main/java/james/Duke.java` file, right-click it, and choose `Run James.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":4,"-":13}},{"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":"nreHieW"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"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":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" mainClass.set(\"app.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":"nreHieW"},"content":" archiveFileName \u003d \u0027james.jar\u0027","lastModifiedDate":"2023-08-28"},{"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"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":"checkstyle {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":24,"-":38}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"# James User Guide","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"James is a desktop app for managing tasks, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). ","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"James is able to track three types of tasks: todos, deadlines and events.","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"### Feature - Track Tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"James is able to track three types of tasks: todos, deadlines and events. ","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"Todos are tasks that do not have a specific date or time associated with them.","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"Deadlines are tasks that have a specific date and time that they are due by.","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"Events are tasks that have a specific date and time associated with them.","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"James provides an easy interface to view all added tasks as well as their status and description.","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"### Feature - Add Tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"James is able to add tasks to the list of tasks that it is tracking. ","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"It has support for adding tasks with a description and a date and time if applicable.","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":"### Feature - Mark Tasks as Done","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":"James is able to mark tasks as done from the list of tasks that it is tracking. This is useful to keep track of tasks that have been completed.","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":"### Feature - Delete Tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"James is able to delete tasks from the list of tasks that it is tracking. ","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":"### `todo` - Add a todo task","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"Adds a todo task to the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":"`todo read book`","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":"Expected outcome:","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"This adds a todo task with the description \"read book\" to the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":"[T]","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":"Now you have 1 taskS in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":"### `deadline` - Add a deadline task","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":"Adds a deadline task to the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"`deadline return book /by 2020-09-18 2359`","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":"This adds a deadline task with the description \"return book\" and the date and time \"18 Sep 2020 11:59PM\" to the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":60,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":"[D][] return book (by: 18 Sep 2020 11:59PM)","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":"Now you have 1 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":"### `event` - Add an event task","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":"Adds an event task to the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":"`event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00`","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":"This adds an event task with the description \"project meeting\" and the date and time \"18 Sep 2020 2:00PM\" to the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":"[E][] project meeting (from: 18 Sep 2020 14:00 to: 18 Sep 2020 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":"Now you have 1 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":"### `list` - List all tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":"Lists all tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":"`list`","lastModifiedDate":"2023-09-18"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":"Expected outcome:","lastModifiedDate":"2023-09-18"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":"This lists all tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":99,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":"1. [T][] read book","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":"2. [D][] return book (by: 18 Sep 2020 11:59PM)","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":"3. [E][] project meeting (from: 18 Sep 2020 14:00 to: 18 Sep 2020 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":"### `mark` - Mark a task as done","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":"Marks a task as done from the list of tasks that James is tracking. The tasks to mark is selected by the index.","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":"`mark 1`","lastModifiedDate":"2023-09-18"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":"Expected outcome:","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":"This marks the first task in the list of tasks that James is tracking as done.","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"nreHieW"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"nreHieW"},"content":"[T][X] read book","lastModifiedDate":"2023-09-18"},{"lineNumber":120,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":121,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"nreHieW"},"content":"### `delete` - Delete a task","lastModifiedDate":"2023-09-18"},{"lineNumber":123,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"nreHieW"},"content":"Deletes a task from the list of tasks that James is tracking. The tasks to delete is selected by the index.","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"nreHieW"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":127,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":128,"author":{"gitId":"nreHieW"},"content":"`delete 1`","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":130,"author":{"gitId":"nreHieW"},"content":"Expected outcome:","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"nreHieW"},"content":"This deletes the first task in the list of tasks that James is tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"nreHieW"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"nreHieW"},"content":"[T][X] read book","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"nreHieW"},"content":"Now you have 2 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":138,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":139,"author":{"gitId":"nreHieW"},"content":"### `find` - Find tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"nreHieW"},"content":"Finds tasks from the list of tasks that James is tracking. The tasks to find is selected by the keyword.","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":143,"author":{"gitId":"nreHieW"},"content":"Example of usage:","lastModifiedDate":"2023-09-18"},{"lineNumber":144,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":145,"author":{"gitId":"nreHieW"},"content":"`find book`","lastModifiedDate":"2023-09-18"},{"lineNumber":146,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":147,"author":{"gitId":"nreHieW"},"content":"Expected outcome:","lastModifiedDate":"2023-09-18"},{"lineNumber":148,"author":{"gitId":"nreHieW"},"content":"This finds all tasks in the list of tasks that James is tracking that contains the keyword \"book\".","lastModifiedDate":"2023-09-18"},{"lineNumber":149,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":150,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":151,"author":{"gitId":"nreHieW"},"content":"Here are the matching tasks in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":152,"author":{"gitId":"nreHieW"},"content":"1. [D][] return book (by: 18 Sep 2020 11:59PM)","lastModifiedDate":"2023-09-18"},{"lineNumber":153,"author":{"gitId":"nreHieW"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":154,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":155,"author":{"gitId":"nreHieW"},"content":"### `bye` - Exit James","lastModifiedDate":"2023-09-18"},{"lineNumber":156,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":157,"author":{"gitId":"nreHieW"},"content":"Exits the James program.","lastModifiedDate":"2023-09-18"},{"lineNumber":158,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":159,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":160,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":161,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":162,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"nreHieW":134,"-":28}},{"path":"src/main/java/app/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * A custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * and a label containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" // add padding between image and text and below the dialog box","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" dialog.setStyle(\"-fx-padding: 10 10 10 10;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" * Sets the background color of the dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" * @param color The color to set the background to.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" public void setBackgroundColor(String color) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" this.setStyle(\"-fx-background-color: \" + color + \"; -fx-padding: 10 0 0 0;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * Returns a DialogBox with the user\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" * @param text The text to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" * @param img The image to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" * @return A DialogBox with the user\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" DialogBox box \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" box.setBackgroundColor(\"#e6f2ff\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" return box;","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" * Returns a DialogBox with the bot\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" * @param text The text to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" * @param img The image to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" * @return A DialogBox with the bot\u0027s text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" db.setBackgroundColor(\"#e6ffe6\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":90}},{"path":"src/main/java/app/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":12}},{"path":"src/main/java/app/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import james.James;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" * A GUI for James using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" private James james \u003d new James();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJames(james);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":31}},{"path":"src/main/java/app/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package app;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"import james.James;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" private James james \u003d new James();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" private Image bot \u003d new Image(this.getClass().getResourceAsStream(\"/images/bot.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" DialogBox.getBotDialog(james.getWelcomeMessage(), bot)","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" * Sets the James object.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" * @param d The James object.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" public void setJames(James d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" james \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" DialogBox.getUserDialog(input, user),","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" DialogBox.getBotDialog(response, bot)","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * Returns the response from bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" String output \u003d this.james.processInput(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":71}},{"path":"src/main/java/james/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" * The time of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" private LocalDateTime time;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * Creates a new DeadlineTask with the given description and time.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" * @param timeInput The time of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" public DeadlineTask(String description, String timeInput) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" assert timeInput !\u003d null : \"timeInput should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" String[] possibleFormats \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" \"yyyy/MM/dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" \"dd/MM/yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" for (String format : possibleFormats) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" this.time \u003d LocalDateTime.parse(timeInput, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" continue;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" if (this.time \u003d\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" throw new DateTimeParseException(\"Invalid date format\", timeInput, 0);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" * Returns the string representation of the DeadlineTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" * @return The string representation of the DeadlineTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" + this.time.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":55}},{"path":"src/main/java/james/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" * Represents an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" /** The start time of the event */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" /** The end time of the event */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" * Constructor for EventTask","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" * @param startTimeInput The start time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" * @param endTimeInput The end time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" public EventTask(String description, String startTimeInput, String endTimeInput) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" assert startTimeInput !\u003d null : \"startTimeInput should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" assert endTimeInput !\u003d null : \"endTimeInput should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" String[] possibleFormats \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" \"yyyy/MM/dd HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" \"dd/MM/yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" for (String format : possibleFormats) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" this.startTime \u003d LocalDateTime.parse(startTimeInput, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" this.endTime \u003d LocalDateTime.parse(endTimeInput, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" continue;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" if (this.startTime \u003d\u003d null || this.endTime \u003d\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" throw new DateTimeParseException(\"Invalid date format\", startTimeInput, 0);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" * Returns the start time and end time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" * @return The string representation of the start time and end time of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" + \" to: \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":61}},{"path":"src/main/java/james/James.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" * James is a personal assistant chatbot that helps a person to keep track of various things.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"public class James {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" /** Handles loading and saving to hard disk */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" /** Stores the tasks. */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" /** Handles user interaction. */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" * Creates a James object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" public James() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" String savePath \u003d \"data/James.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" Storage storage \u003d new Storage(savePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" ArrayList\u003cTask\u003e tasks \u003d storage.load();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" this.tasks \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" } catch (LoadingException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" new James().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" * Starts the James program.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" public void run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" ui.start(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" this.storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" } catch (SavingException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Error saving file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" * Processes the user input and returns the outpu from the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" * @return The output from the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" public String processInput(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" assert input !\u003d null : \"input should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" String output \u003d this.ui.processInput(this.tasks, input);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" if (output \u003d\u003d \"Bye. Hope to see you again soon!\") {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" this.storage.save(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" } catch (SavingException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Error saving file\");","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" public String getWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" return \"Hello! I\u0027m James\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":80}},{"path":"src/main/java/james/JamesException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents a JamesException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class JamesException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" * Constructor for JamesException.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" public JamesException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":15}},{"path":"src/main/java/james/LoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents an exception that occurs when loading from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class LoadingException extends JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Constructs a new LoadingException with the specified detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" public LoadingException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":16}},{"path":"src/main/java/james/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Parser class to parse user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Enum to represent the type of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" EVENT","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" private static String sadFace \u003d \"\\u2639\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" private static String line \u003d \"___________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" * Parses the user input and returns a Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" * @param input User input.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" * @return Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" * @throws JamesException If the user input is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" public Task parseTask(String input) throws JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" Parser.TaskType taskType \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" if (input.contains(\"todo\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" taskType \u003d Parser.TaskType.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" } else if (input.contains(\"deadline\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" taskType \u003d Parser.TaskType.DEADLINE;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" } else if (input.contains(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" taskType \u003d Parser.TaskType.EVENT;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" if (taskType \u003d\u003d Parser.TaskType.TODO) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" String[] description \u003d input.split(\"todo \");","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" if (description.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" task \u003d new ToDoTask(description[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.DEADLINE) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" String[] parsed \u003d input.split(\"deadline \");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" if (parsed.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" String[] param \u003d parsed[1].split(\" /by \");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" if (param.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The time of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" String description \u003d param[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" String time \u003d param[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" task \u003d new DeadlineTask(description, time);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.EVENT) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" String[] parsed \u003d input.split(\"event \")[1].split(\" /from \");","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" if (parsed.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" String description \u003d parsed[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" String[] params \u003d parsed[1].split(\" /to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" if (params.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The time of a event cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" String startTime \u003d params[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" String endTime \u003d params[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" task \u003d new EventTask(description, startTime, endTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" return task;","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" * Parses the user input and prints the corresponding output.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" * @param tasks TaskList object.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" * @param input User input.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":" public String parse(TaskList tasks, String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" String[] inputParts \u003d input.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" String command \u003d inputParts[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" Integer taskIdx;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":" switch (command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Here are the tasks in your list:\\n\" + tasks;","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":" taskIdx \u003d Integer.parseInt(inputParts[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":" tasks.unmarkTask(taskIdx - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"OK! I\u0027ve marked this task as not done yet:\\n\" + tasks.getTask(taskIdx - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":" taskIdx \u003d Integer.parseInt(inputParts[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":" tasks.markTask(taskIdx - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Nice! I\u0027ve marked this task as done:\\n\" + tasks.getTask(taskIdx - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":" taskIdx \u003d Integer.parseInt(inputParts[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Noted. I\u0027ve removed this task:\\n\" + tasks.getTask(taskIdx - 1)","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":" + \"\\nNow you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":" tasks.deleteTask(taskIdx - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":" String keyword \u003d inputParts[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Here are the matching tasks in your list:\\n\" + tasks.find(keyword);","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"nreHieW"},"content":" Task task \u003d parseTask(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"nreHieW"},"content":" boolean isAdded \u003d tasks.addTask(task);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"nreHieW"},"content":" if (!isAdded) {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"nreHieW"},"content":" throw new JamesException(sadFace + \" OOPS!!! The task is already in the list.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"nreHieW"},"content":" output +\u003d \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\" + line + \"\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"nreHieW"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"nreHieW"},"content":" } catch (JamesException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"nreHieW"},"content":" output +\u003d e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"nreHieW"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":134}},{"path":"src/main/java/james/SavingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents an exception that occurs during saving.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class SavingException extends JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Constructs a new SavingException with the specified detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" public SavingException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":16}},{"path":"src/main/java/james/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Storage class to handle saving and loading of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" /** The path to the save file */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" private String savePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" /** The save file */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" private File saveFile;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * Constructor for Storage","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" * Creates the save file if it does not exist","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" * @param path The path to the save file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" this.savePath \u003d path;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" String directory \u003d path.substring(0, path.lastIndexOf(\"/\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" File dir \u003d new File(directory);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" dir.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" this.saveFile \u003d file;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"An error occurred when initializing: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" * Saves the task list to the save file","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" * @param taskList The task list to save","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" * @throws SavingException If an error occurs when saving","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" public void save(TaskList taskList) throws SavingException {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" FileWriter writer \u003d new FileWriter(this.saveFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" writer.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" writer.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" throw new SavingException(\"An error occurred when saving: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" * Loads the task list from the save file","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * @return An ArrayList of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" * @throws LoadingException If an error occurs when loading","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" public ArrayList\u003cTask\u003e load() throws LoadingException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" Scanner reader \u003d new Scanner(this.saveFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" Task task \u003d loadTask(data);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" reader.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":" } catch (java.io.FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" throw new LoadingException(\"An error occurred when loading: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" * Loads a task from a string","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":" * @param s The string to load from","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":" * @return Task","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":" public Task loadTask(String s) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":" Character taskType \u003d s.charAt(1); // T, D, E","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":" Boolean isDone \u003d s.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":" String description \u003d s.substring(7);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":" if (taskType \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":" // example [T][X] read book","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":" task \u003d new ToDoTask(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nreHieW"},"content":" // example [D][X] return book (by: Aug 06 2022 14:00)","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":" String[] params \u003d description.split(\"\\\\(by: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":" String time \u003d params[1].substring(0, params[1].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":" task \u003d new DeadlineTask(params[0], time);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":" } else if (taskType \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":" // example [E][ ] project meeting (from: Aug 06 2022 14:00 to: Aug 06 2022 18:00)","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":" String[] params \u003d description.split(\"\\\\(from: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":" String startTime \u003d description.split(\"from: \")[1].split(\" to: \")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":" String endTime \u003d description.split(\"to: \")[1].substring(0,","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":" description.split(\"to: \")[1].length() - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":" task \u003d new EventTask(params[0], startTime, endTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":" task.mark();","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":" return task;","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":116}},{"path":"src/main/java/james/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Task class to represent a task","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" /** The status of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" * Constructor for Task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * @param description A description of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" * Returns the description of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" * @return String","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" String status \u003d getStatusIcon();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" return \"[\" + status + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" * Returns the status icon of the task if its done","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" * @return String","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" /** Marks the task as done **/","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" public void mark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" /** Unmarks the task as done **/","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" public void unmark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":53}},{"path":"src/main/java/james/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":" * TaskList class to handle the list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" /** The parser to parse the user input */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" /** The list of tasks */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" private ArrayList\u003cTask\u003e items \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * Constructor for TaskList from existing list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * @param items the list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" public TaskList(ArrayList\u003cTask\u003e items) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" this.items \u003d items;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" * Constructor for TaskList from scratch","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" this.items \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" * Unmarks the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" * @param idx the index of the task to be unmarked","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" public void unmarkTask(Integer idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" task.unmark();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" * Marks the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" * @param idx the index of the task to be marked","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" public void markTask(Integer idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" task.mark();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" * Deletes the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":" * @param idx the index of the task to be deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nreHieW"},"content":" public void deleteTask(Integer idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"nreHieW"},"content":" this.items.remove(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nreHieW"},"content":" * Adds a task to the list","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nreHieW"},"content":" * @param task the task to be added","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nreHieW"},"content":" * @return true if the task is added successfully, false otherwise","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nreHieW"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"nreHieW"},"content":" // check for duplicates","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"nreHieW"},"content":" for (Task item : this.items) {","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"nreHieW"},"content":" if (item.toString().equals(task.toString())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"nreHieW"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"nreHieW"},"content":" this.items.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nreHieW"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nreHieW"},"content":" * Find the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nreHieW"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nreHieW"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nreHieW"},"content":" return this.items.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nreHieW"},"content":" * Gets the list of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nreHieW"},"content":" * @return all the tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"nreHieW"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nreHieW"},"content":" return this.items;","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"nreHieW"},"content":" * Gets the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"nreHieW"},"content":" * @param index the index of the task to be retrieved","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"nreHieW"},"content":" * @return the task at the specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"nreHieW"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nreHieW"},"content":" return this.items.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"nreHieW"},"content":" * Finds the tasks that contain the query string","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"nreHieW"},"content":" * @param query the query string","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nreHieW"},"content":" * @return the string representation of the tasks that contain the query string","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nreHieW"},"content":" public String find(String query) {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nreHieW"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nreHieW"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c this.items.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"nreHieW"},"content":" if (task.toString().contains(query)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"nreHieW"},"content":" output +\u003d (count + 1) + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"nreHieW"},"content":" count++;","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"nreHieW"},"content":" // remove the last \\n","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"nreHieW"},"content":" if (output.length() \u003e 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"nreHieW"},"content":" output \u003d output.substring(0, output.length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"nreHieW"},"content":" * Returns the string representation of the task list","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nreHieW"},"content":" * @return the string representation of the task list","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"nreHieW"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c this.items.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"nreHieW"},"content":" Task task \u003d this.items.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"nreHieW"},"content":" output +\u003d (i + 1) + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"nreHieW"},"content":" // remove the last \\n","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"nreHieW"},"content":" if (output.length() \u003e 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"nreHieW"},"content":" output \u003d output.substring(0, output.length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"nreHieW"},"content":" return output;","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":148}},{"path":"src/main/java/james/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":" * Represents a ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" * Constructor for ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" * @param description Description of the ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" public ToDoTask(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" * Returns a string representation of the ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" * @return String representation of the ToDoTask.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":24}},{"path":"src/main/java/james/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":" * Represents the user interface of the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" private static String line \u003d \"_________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" * The parser used to parse user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" private Parser parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" * Prints the error message when the file cannot be loaded.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Error loading file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":" * Starts the program and takes in user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" public void start(TaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" System.out.println(line + \"\\n\" + \"Hello! I\u0027m James\\n + What can I do for you?\\n\" + line);","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" String input \u003d in.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" String output \u003d this.parser.parse(tasks, input);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":" input \u003d in.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" System.out.println(\"Bye. Hope to see you again soon!\\n\" + line);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" public String processInput(TaskList tasks, String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" return this.parser.parse(tasks, input);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":55}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"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\"app.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"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":"nreHieW"},"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":"nreHieW"},"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":"nreHieW"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nreHieW":19}},{"path":"src/test/java/james/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" public void checkTaskParsing() throws JamesException {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" String[] taskInputs \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" \"todo read book\",","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" \"deadline return book /by 2019-12-01 20:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" \"event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" \"todo join sports club\",","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" \"todo borrow book\"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" String[] taskOutputs \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" \"[T][ ] read book\",","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" \"[D][ ] return book (by: Dec 01 2019 20:00)\",","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" \"[E][ ] project meeting (from: Aug 06 2022 14:00 to: Aug 06 2022 18:00)\",","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" \"[T][ ] join sports club\",","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" \"[T][ ] borrow book\"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c taskInputs.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":" Task task \u003d parser.parseTask(taskInputs[i]);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nreHieW"},"content":" assertEquals(task.toString(), taskOutputs[i]);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nreHieW"},"content":" public void checkParsing() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nreHieW"},"content":" String[] taskInputs \u003d {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nreHieW"},"content":" \"todo read book\",","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nreHieW"},"content":" \"deadline return book /by 2019-12-01 20:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nreHieW"},"content":" \"event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00\",","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nreHieW"},"content":" \"todo join sports club\",","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nreHieW"},"content":" \"todo borrow book\"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nreHieW"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nreHieW"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nreHieW"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c taskInputs.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nreHieW"},"content":" parser.parse(taskList, taskInputs[i]);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nreHieW"},"content":" assertEquals(taskList.size(), taskInputs.length);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":54}},{"path":"src/test/java/james/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"package james;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":" String[] stubs \u003d {\"stub1\", \"stub2\", \"stub3\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"nreHieW"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nreHieW"},"content":" for (String stub : stubs) {","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"nreHieW"},"content":" taskList.addTask(new ToDoTask(stub));","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nreHieW"},"content":" assertEquals(taskList.size(), stubs.length);","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nreHieW"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nreHieW"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nreHieW"},"content":" public void testTaskString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nreHieW"},"content":" String[] stubs \u003d {\"stub1\", \"stub2\", \"stub3\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"nreHieW"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nreHieW"},"content":" for (String stub : stubs) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"nreHieW"},"content":" taskList.addTask(new ToDoTask(stub));","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"nreHieW"},"content":" for (int i \u003d 0; i \u003c stubs.length; i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"nreHieW"},"content":" assertEquals(taskList.getTask(i).toString(), \"[T][ ] \" + stubs[i]);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nreHieW"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nreHieW"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nreHieW":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nreHieW"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"nreHieW"},"content":"deadline return book /by 2019-12-01 20:00","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nreHieW"},"content":"event project meeting /from 2022-08-06 14:00 /to 2022-08-06 18:00","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nreHieW"},"content":"todo join sports club","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"nreHieW"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"nreHieW"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"nreHieW"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"nreHieW"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"nreHieW"},"content":"deadline return book /by 2019-12-02 21:00","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nreHieW"},"content":"event project meeting /from 2023-01-02 09:00 /to 2023-01-02 16:00","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nreHieW"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"nreHieW":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":"nreHieW"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/james/*.java","lastModifiedDate":"2023-09-04"},{"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":"nreHieW"},"content":"java -classpath ../bin James \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":"-"},"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":{"nreHieW":2,"-":36}}] diff --git a/nreHieW_ip_master/commits.json b/nreHieW_ip_master/commits.json index dc918986..7a3fabb4 100644 --- a/nreHieW_ip_master/commits.json +++ b/nreHieW_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nreHieW":[{"date":"2023-08-21","commitResults":[{"hash":"b268d39bf00870804f5e87601f0baee951a94031","isMergeCommit":false,"messageTitle":"Rename to James","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"1459852702d05148beccc0eeacaaf853197d068b","isMergeCommit":false,"messageTitle":"Added User Input and Echo Functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"9df28ad2218618b402d84e0d3e81107bcab77890","isMergeCommit":false,"messageTitle":"Add ArrayList to Store Tasks with","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"ec2f912853e61c50dd1409d7ae35d3367112c04c","isMergeCommit":false,"messageTitle":"Add Task Functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":3}}},{"hash":"948e03fc7cf17f932ee50fc3f0a2cf9d54b7cfb7","isMergeCommit":false,"messageTitle":"Add Different Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"b824b262dd953169d0ebfaead517fb1c197c083c","isMergeCommit":false,"messageTitle":"Add Automated Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"ce0d21c8931e291947ddde12b4fc66285886a601","isMergeCommit":false,"messageTitle":"Add Error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"fa27f95930944b67f06232e5373b0f5e7e614a13","isMergeCommit":false,"messageTitle":"Add Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":31}}},{"hash":"ced9d2718b69c5f271fe9b407588de08dd0158f9","isMergeCommit":false,"messageTitle":"Add Delete Functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"e3d59eb9e97387c64d6984e09f36a72f0812a0fd","isMergeCommit":false,"messageTitle":"Add Enums and move main logic out of main","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":3}}},{"hash":"5189e7faa21ac3277172da0f0b266f5f6e874b81","isMergeCommit":false,"messageTitle":"Renamed Child Task Files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"5f92a0137def80b0dd3e91269bafa091e70322e3","isMergeCommit":false,"messageTitle":"Convert items to instance attribute","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"ed04e70ab706070b13ffb9068b2308e241ff6d83","isMergeCommit":false,"messageTitle":"Rename Task files and implement saving","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":9}}},{"hash":"56e5f8d978fe174e4816bb3a4f7c54d261feecb7","isMergeCommit":false,"messageTitle":"Change save file path","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"b3ed169eb71165673dad05d6e49d94cd48f59d13","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"8c724b35154f1fc2b070b8f6cc41285e866852e6","isMergeCommit":false,"messageTitle":"Include DateTime parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"9f67e5c5cc5708c1e2924a7e9f8d775c0eff8105","isMergeCommit":false,"messageTitle":"Update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4}}},{"hash":"5fcaa1c84319a015bc3ee9f23fc32d0c2d8888c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e28e039884c8b1d4eec9744d538de14718612b31","isMergeCommit":false,"messageTitle":"Implement more classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":333,"deletions":131}}},{"hash":"6dc888615aa0842b74d5af9e2b213b34577b4c9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"1e092fa4cd3ab0e6ba5fb1034325c3812ec4d1b6","isMergeCommit":false,"messageTitle":"Refactor into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"8ce0f2e2265fe3ce6e6742b9d01f79b43515972f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a7ce5dc4a8381a8eb30cca965a755e328fc5ce6b","isMergeCommit":false,"messageTitle":"Update gradle run classname","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a3b7ffc19ccba722e3f57fa7232cccf8f80b9d8d","isMergeCommit":false,"messageTitle":"Add CheckStyle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"11d59f1870b67ca2d005645958ae614f425e81dc","isMergeCommit":false,"messageTitle":"Refactor directory structure","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":15},"sh":{"insertions":1,"deletions":1}}},{"hash":"f6d9601c11ebb0c2b6f8ccc7efc41acfc621429c","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":79,"deletions":0}}},{"hash":"14d3126e8e4fc6c12fc61194a18ad7ad4454cf9a","isMergeCommit":false,"messageTitle":"Create Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3}}},{"hash":"25a68dae9b4f3d43f58f8a3fbf228de11b430b65","isMergeCommit":false,"messageTitle":"Added Docstrings","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":238,"deletions":3}}},{"hash":"62ebe450f9a547479c47feeafb32be62a533583b","isMergeCommit":false,"messageTitle":"Fix style issues based on checkstyle","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":54}}},{"hash":"e41d8a55a8afaeb876f934c78865e6135dcd0237","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"09ab6b799374172c20ee12a0dffc7e1fb286c144","isMergeCommit":false,"messageTitle":"Fix style issues based on checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":54}}},{"hash":"5ab19ef1646e646078e20991733ee5263f55c866","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"e5a51c4908ea1f982de6574449c058d01b97b636","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1b271a03e423ca48e35cebc3dbd218bdac333938","isMergeCommit":false,"messageTitle":"Add Javadoc for Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"dd2391035831d47d663e7983495e2207bfeb2e48","isMergeCommit":false,"messageTitle":"Edit Readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":4,"deletions":11}}},{"hash":"1a7907672cba52e26e449db7f3c1746b913d2b93","isMergeCommit":false,"messageTitle":"Refactor package","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":7,"deletions":0},"java":{"insertions":43,"deletions":25},"sh":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"43d617ea9eeaba0a2cd0c88f9f70fdbf034bc6de","isMergeCommit":false,"messageTitle":"Add UI for James","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":0,"deletions":7},"java":{"insertions":231,"deletions":21}}},{"hash":"eff9e0fe91994c1171bd09c85e1f7eb39b6c189d","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":17}}},{"hash":"882e747b1a0a46635efac2eb1aa1f69ed1b8fbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"39721e7b7692c079342a0db535f04f89178e132b","isMergeCommit":false,"messageTitle":"Added Assertions to various tasks","messageBody":"This commit adds assertions to check if the time input for both DeadlineTask and EventTask is present.\nIt also checks if the input to James::processInput is null.\n\nIn sum, this checks if the parser has accurately parsed the user input.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"fe64fc5ece94cf1b634bcc82f22c2061661942c4","isMergeCommit":false,"messageTitle":"Improved Code Quality of James","messageBody":"This commit improved the readability of the messages from James after each command. Previously, the strings were added but now\nthey are written in a single line which helps make it more readable.\n\nThis commit also includes comments for the different types of commands to make the parsing easier to understand.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":15}}},{"hash":"f5da899d9bec99e4700fddad1afb8c01a7129453","isMergeCommit":true,"messageTitle":"Merge pull request #2 from nreHieW/branch-A-CodeQuality","messageBody":"Improve Code Quality of James","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"1623ee1910b1faed8f998e421a7aca0d0b8972bd","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nreHieW/branch-A-Assertions","messageBody":"Add Assertions to various tasks","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"a8fb2ac3c9656f2e435f432b5d2dca744abd45f8","isMergeCommit":false,"messageTitle":"Add check for duplicate tasks","messageBody":"This commit adds check for duplicate tasks (Extension C-DetectDuplicates). The check is by checking the tostring() method\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"c70fc29b3bff739209d4c3274b25f3d1e28243fa","isMergeCommit":false,"messageTitle":"Update tests","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":9}}},{"hash":"d52c090fb047b2a4b1b770024f5e48f58187530a","isMergeCommit":true,"messageTitle":"Merge pull request #4 from nreHieW/branch-BCD-extension","messageBody":"Add check for duplicate tasks","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nreHieW":{"java":1061,"md":4,"fxml":35,"sh":2,"bat":0,"gradle":24,"txt":11}},"authorContributionVariance":{"nreHieW":65622.625},"authorDisplayNameMap":{"nreHieW":"CS2103T-T15-4 LIM ..HERN"}} +{"authorDailyContributionsMap":{"nreHieW":[{"date":"2023-08-21","commitResults":[{"hash":"b268d39bf00870804f5e87601f0baee951a94031","isMergeCommit":false,"messageTitle":"Rename to James","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"1459852702d05148beccc0eeacaaf853197d068b","isMergeCommit":false,"messageTitle":"Added User Input and Echo Functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"9df28ad2218618b402d84e0d3e81107bcab77890","isMergeCommit":false,"messageTitle":"Add ArrayList to Store Tasks with","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"ec2f912853e61c50dd1409d7ae35d3367112c04c","isMergeCommit":false,"messageTitle":"Add Task Functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":3}}},{"hash":"948e03fc7cf17f932ee50fc3f0a2cf9d54b7cfb7","isMergeCommit":false,"messageTitle":"Add Different Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"b824b262dd953169d0ebfaead517fb1c197c083c","isMergeCommit":false,"messageTitle":"Add Automated Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"ce0d21c8931e291947ddde12b4fc66285886a601","isMergeCommit":false,"messageTitle":"Add Error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"fa27f95930944b67f06232e5373b0f5e7e614a13","isMergeCommit":false,"messageTitle":"Add Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":31}}},{"hash":"ced9d2718b69c5f271fe9b407588de08dd0158f9","isMergeCommit":false,"messageTitle":"Add Delete Functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"e3d59eb9e97387c64d6984e09f36a72f0812a0fd","isMergeCommit":false,"messageTitle":"Add Enums and move main logic out of main","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":3}}},{"hash":"5189e7faa21ac3277172da0f0b266f5f6e874b81","isMergeCommit":false,"messageTitle":"Renamed Child Task Files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"5f92a0137def80b0dd3e91269bafa091e70322e3","isMergeCommit":false,"messageTitle":"Convert items to instance attribute","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"ed04e70ab706070b13ffb9068b2308e241ff6d83","isMergeCommit":false,"messageTitle":"Rename Task files and implement saving","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":9}}},{"hash":"56e5f8d978fe174e4816bb3a4f7c54d261feecb7","isMergeCommit":false,"messageTitle":"Change save file path","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"b3ed169eb71165673dad05d6e49d94cd48f59d13","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"8c724b35154f1fc2b070b8f6cc41285e866852e6","isMergeCommit":false,"messageTitle":"Include DateTime parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"9f67e5c5cc5708c1e2924a7e9f8d775c0eff8105","isMergeCommit":false,"messageTitle":"Update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4}}},{"hash":"5fcaa1c84319a015bc3ee9f23fc32d0c2d8888c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e28e039884c8b1d4eec9744d538de14718612b31","isMergeCommit":false,"messageTitle":"Implement more classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":333,"deletions":131}}},{"hash":"6dc888615aa0842b74d5af9e2b213b34577b4c9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"1e092fa4cd3ab0e6ba5fb1034325c3812ec4d1b6","isMergeCommit":false,"messageTitle":"Refactor into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"8ce0f2e2265fe3ce6e6742b9d01f79b43515972f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a7ce5dc4a8381a8eb30cca965a755e328fc5ce6b","isMergeCommit":false,"messageTitle":"Update gradle run classname","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a3b7ffc19ccba722e3f57fa7232cccf8f80b9d8d","isMergeCommit":false,"messageTitle":"Add CheckStyle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"11d59f1870b67ca2d005645958ae614f425e81dc","isMergeCommit":false,"messageTitle":"Refactor directory structure","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":15},"sh":{"insertions":1,"deletions":1}}},{"hash":"f6d9601c11ebb0c2b6f8ccc7efc41acfc621429c","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":79,"deletions":0}}},{"hash":"14d3126e8e4fc6c12fc61194a18ad7ad4454cf9a","isMergeCommit":false,"messageTitle":"Create Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3}}},{"hash":"25a68dae9b4f3d43f58f8a3fbf228de11b430b65","isMergeCommit":false,"messageTitle":"Added Docstrings","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":238,"deletions":3}}},{"hash":"62ebe450f9a547479c47feeafb32be62a533583b","isMergeCommit":false,"messageTitle":"Fix style issues based on checkstyle","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":54}}},{"hash":"e41d8a55a8afaeb876f934c78865e6135dcd0237","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"09ab6b799374172c20ee12a0dffc7e1fb286c144","isMergeCommit":false,"messageTitle":"Fix style issues based on checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":54}}},{"hash":"5ab19ef1646e646078e20991733ee5263f55c866","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"e5a51c4908ea1f982de6574449c058d01b97b636","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1b271a03e423ca48e35cebc3dbd218bdac333938","isMergeCommit":false,"messageTitle":"Add Javadoc for Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"dd2391035831d47d663e7983495e2207bfeb2e48","isMergeCommit":false,"messageTitle":"Edit Readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":4,"deletions":11}}},{"hash":"1a7907672cba52e26e449db7f3c1746b913d2b93","isMergeCommit":false,"messageTitle":"Refactor package","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":7,"deletions":0},"java":{"insertions":43,"deletions":25},"sh":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"43d617ea9eeaba0a2cd0c88f9f70fdbf034bc6de","isMergeCommit":false,"messageTitle":"Add UI for James","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":0,"deletions":7},"java":{"insertions":231,"deletions":21}}},{"hash":"eff9e0fe91994c1171bd09c85e1f7eb39b6c189d","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":17}}},{"hash":"882e747b1a0a46635efac2eb1aa1f69ed1b8fbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"39721e7b7692c079342a0db535f04f89178e132b","isMergeCommit":false,"messageTitle":"Added Assertions to various tasks","messageBody":"This commit adds assertions to check if the time input for both DeadlineTask and EventTask is present.\nIt also checks if the input to James::processInput is null.\n\nIn sum, this checks if the parser has accurately parsed the user input.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"fe64fc5ece94cf1b634bcc82f22c2061661942c4","isMergeCommit":false,"messageTitle":"Improved Code Quality of James","messageBody":"This commit improved the readability of the messages from James after each command. Previously, the strings were added but now\nthey are written in a single line which helps make it more readable.\n\nThis commit also includes comments for the different types of commands to make the parsing easier to understand.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":15}}},{"hash":"f5da899d9bec99e4700fddad1afb8c01a7129453","isMergeCommit":true,"messageTitle":"Merge pull request #2 from nreHieW/branch-A-CodeQuality","messageBody":"Improve Code Quality of James","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"1623ee1910b1faed8f998e421a7aca0d0b8972bd","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nreHieW/branch-A-Assertions","messageBody":"Add Assertions to various tasks","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"a8fb2ac3c9656f2e435f432b5d2dca744abd45f8","isMergeCommit":false,"messageTitle":"Add check for duplicate tasks","messageBody":"This commit adds check for duplicate tasks (Extension C-DetectDuplicates). The check is by checking the tostring() method\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"c70fc29b3bff739209d4c3274b25f3d1e28243fa","isMergeCommit":false,"messageTitle":"Update tests","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":9}}},{"hash":"d52c090fb047b2a4b1b770024f5e48f58187530a","isMergeCommit":true,"messageTitle":"Merge pull request #4 from nreHieW/branch-BCD-extension","messageBody":"Add check for duplicate tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"c25ee6695bc9ce830060ec60d49c84bfc419ada4","isMergeCommit":false,"messageTitle":"Add User Guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":143,"deletions":10}}},{"hash":"f627e2f9f66c1c9c258153e3de4526ae82dd6a78","isMergeCommit":true,"messageTitle":"Merge pull request #6 from nreHieW/branch-A-UserGuide","messageBody":"Add User Guide","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nreHieW":{"java":1061,"md":138,"fxml":35,"sh":2,"bat":0,"gradle":24,"txt":11}},"authorContributionVariance":{"nreHieW":52511.24},"authorDisplayNameMap":{"nreHieW":"CS2103T-T15-4 LIM ..HERN"}} diff --git a/phiphi-tan_ip_master/authorship.json b/phiphi-tan_ip_master/authorship.json index 87394d55..8107684f 100644 --- a/phiphi-tan_ip_master/authorship.json +++ b/phiphi-tan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"# PHI :dragon_face: :rowboat:","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"\u003e\"Coding is a mental construct, just think more computing thoughts\" - Me","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"*PHI* frees your mind of having to remember things you need to do. It\u0027s","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"- text-based","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"- easy to figure out","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"- encapsulates the very human touch of having somebody exasperated with your improper user inputs.","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"All you need to do is:","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"1. Download it from [here](https://github.com/phiphi-tan/ip)","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"2. Clone it (and stop complaining)","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"3. Do your stuff and watch it manage your tasks for you","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"Best part of all, it is completely **FREE** (~~unlike its creator~~)!","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"Look at all the things it can do:","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"- [x] Managing to-do items","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"- [x] Managing tasks with deadlines","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"- [x] Managing events","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"- [x] Search feature for keywords","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":"- [ ] Reminders (coming soon, or not)","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":"----","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"Since you\u0027re still here, here\u0027s a chunk of code for you to test out your coding abilities:","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" ```java","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" /*","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" Welcome to","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" ___ _ _ ___","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" | _ \\ || |_ _|","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" | _/ __ || | ","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" |_| |_||_|___|","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" PHI (Programmable Human Interface)","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":"public class Main {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"You are a nerd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" } ","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":"```","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"phiphi-tan":35,"-":5}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \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":"phiphi-tan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"checkstyle {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-14"},{"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":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"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":"phiphi-tan"},"content":" mainClass.set(\"phi.Phi\")","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" archiveBaseName \u003d \"phi\"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"phiphi-tan":22}},{"path":"changelog.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"# CS2103T Individual Project (iP)","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"This is a project log for my individual project","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" ```","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" Welcome to","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":" ___ _ _ ___","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" | _ \\ || |_ _|","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" | _/ __ || | ","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" |_| |_||_|___|","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" PHI (Programmable Human Interface)","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" ```","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"---","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"## Main Increments","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"### Level 0. Rename, Greet, Exit","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"- Chatbot was created and given the name Phi","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"- Greets the user and exits the program","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"### Level 1. Echo","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"- PHI now echoes commands entered by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"- Exits when the user types the command _bye_","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":"### Level 2. Add, List","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"- Text entered by the user will be saved as a task","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"- Tasks are displayed in a list upon command _list_","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"### Level 3. Mark as Done","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"- Tasks can now be marked as done (and undone)","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"### Level 4. ToDos, Events, Deadlines","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"- Tasks are now classified under one of three types:","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" - ToDos: Tasks without any date/time","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" - Deadlines: Tasks to be done before a specified deadline","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" - Events: Tasks that start and end at a specified time","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" ","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":"### Level 5. Handle Errors","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"- PHI can deal with basic-level errors (incorrect inputs) entered by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":"### Level 6. Delete","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":"- Tasks can now be deleted from the list","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":"### Level 7. Save","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":"- Tasks are saved in storage whenever any changes are made to the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":"- Data from the tasklist is loaded from the storage when PHI starts (_./data/tasklist.txt_)","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":"### Level 8. Dates and Times","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":"- Deadline/Event dates can now be understood in yyyy-MM-dd format, and are displayed back as MMM dd yyyy","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" - Non-recognised formats will continue to be saved as a String","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":"### Level 9. Find","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":"- Users can now find tasks by searching for a keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":"## Other Increments","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":"### Automated Text UI Testing","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":"- Testing of PHI is semi-automated through I/O redirection (text-ui-test)","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":"### Enumerations","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":"- Enumerations used for the Tasks data-type","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":"### More OOP","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":"- Extraction of code as classes for more Object-Oriented-Programming (OOP)","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" - Creating/Refining the following classes (Ui, Storage, Parser, TaskList)","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":"### Packages","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":"- Classes in PHI are organised into suitable java packages","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" - Currently, all classes are in one package (_phi_)","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" ","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":"### Gradle","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":"- Support for Gradle added to PHI, allowing automation of some build/run tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":"### JUnit Tests","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":"- JUnit tests created to test code behaviour","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":"### JAR File","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":"- **phi.jar v1.0.0** released","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":" - PHI packaged into an executable JAR file (built using Gradle) for easier distribution","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":" - ","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":"### JavaDoc","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":"- JavaDoc header comments added to all classes and all non-trivial methods","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":"### Coding Standard","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":"- Code should now comply with the given coding standard for this project","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":"### Checkstyle","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":"- CheckStyle now incorporated to detect coding style violations. Configured to be used with Gradle","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"phiphi-tan":97}},{"path":"data/tasklist.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"T|true|cry","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"T|false|coding homework","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"D|false|get better at coding|ASAP","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"E|false|more coding|now|end of time","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"D|true|something|Dec 03 2011","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"T|false|code","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":6}},{"path":"src/main/java/phi/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":12}},{"path":"src/main/java/phi/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import phi.ui.MainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" * A GUI for Phi using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" private Phi phi \u003d new Phi();","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setPhi(phi);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" stage.show();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":32}},{"path":"src/main/java/phi/Phi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import phi.ui.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" * Represents the core of the PHI chatbot. The root of the program will run from here.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" * @author phiphi-tan","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"public class Phi {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new instance of Phi","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" * Storage is loaded with the hardcoded file path of the .txt file","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" public Phi() {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" taskStorage \u003d new Storage(\"./data/tasklist.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" tasks \u003d taskStorage.readFromFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" this.parser \u003d new Parser(tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" new Phi().run();","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(ui.greeting());","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" takeInput();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(ui.goodbye());","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Abstraction for the user-input handling process, which will continue running until the input \"bye\" is received","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" private void takeInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(this.parser.handle(input));","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" taskStorage.writeToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" System.out.println();","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" * Generates response to user input, and writes data to file after","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" String response \u003d this.parser.handle(input.trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" taskStorage.writeToFile(tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" return response;","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":68}},{"path":"src/main/java/phi/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * Represents the Deadline task type, and contains a String with a user-specified date as the deadline of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" private String deadlineString;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Deadline instance","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" * @param msg Task message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param isDone Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @param deadline User-specified deadline of task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" public Deadline(String msg, boolean isDone, String deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" super(Type.D, isDone, msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" this.deadlineString \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" LocalDate deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter outputFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" deadlineDate \u003d LocalDate.parse(deadlineString, inputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" this.deadlineString \u003d deadlineDate.format(outputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" //System.out.println(\"Can\u0027t find a proper date format, using deadline as a String\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" return super.toString() + String.format(\" (by: %s)\", deadlineString);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" public String outputFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"%s|%b|%s|%s\", taskType.toString(), done, taskName, deadlineString);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":47}},{"path":"src/main/java/phi/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * Represents the Event task type, and contains two Strings with user-specified dates as the start and end of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" private String start;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" private String end;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Event instance","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param msg Message to be displayed","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @param isDone Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" * @param start User-specified start time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" * @param end User-specified end time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" public Event(String msg, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" super(Type.E, isDone, msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" LocalDate startDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" LocalDate endDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter outputFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" startDate \u003d LocalDate.parse(start, inputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" this.start \u003d startDate.format(outputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" //System.out.println(\"Can\u0027t find a proper date format, using /from input as a String\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" endDate \u003d LocalDate.parse(end, inputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" this.end \u003d endDate.format(outputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" //System.out.println(\"Can\u0027t find a proper date format, using /to input as a String\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" return super.toString() + String.format(\" (from: %s to: %s)\", start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" public String outputFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"%s|%b|%s|%s|%s\", taskType.toString(), done, taskName, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":59}},{"path":"src/main/java/phi/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Abstract parent class of all task types. Cannot be instantiated.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" protected enum Type { T, D, E }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" protected Type taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" protected boolean done;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" protected String taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Task","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" * @param taskType Type of task (ToDo, Deadline, Event) in enumerated type","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param done Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @param taskName Task message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" public Task(Type taskType, boolean done, String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" this.done \u003d done;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public void markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" return done","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" ? String.format(\"[%s][X] %s\", taskType, taskName)","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" : String.format(\"[%s][ ] %s\", taskType, taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Returns the task in a String, formatted in the style that will be written to storage","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" * @return String representation of the task in output format","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" public abstract String outputFormat();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" public String getMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" return this.taskName;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":51}},{"path":"src/main/java/phi/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Represents the ToDo task type","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new ToDo instance","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" * @param msg Task message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" * @param isDone Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" public ToDo(String msg, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" super(Type.T, isDone, msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" public String outputFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"%s|%b|%s\", taskType.toString(), done, taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":28}},{"path":"src/main/java/phi/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" // System.out.println(\"This is the text: \" + text);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" public static DialogBox getPhiDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":62}},{"path":"src/main/java/phi/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"import phi.Phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" private final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" private Phi phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.jpeg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" private final Image phiImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/phi.jpeg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" // add the greeting","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" dialogContainer.getChildren().add(DialogBox.getPhiDialog(ui.greeting(), phiImage));","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" public void setPhi(Phi p) {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" this.phi \u003d p;","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing PHI\u0027s reply and then appends them to","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(1)); // 1 second delay","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" // Close the JavaFX application after the delay","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" Platform.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" });","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" pause.play();","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" String response \u003d phi.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" DialogBox.getPhiDialog(response, phiImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":65}},{"path":"src/main/java/phi/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Represents user interactions","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * Greeting message procedure","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" public String greeting() {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" String logo \u003d \" ___ _ _ ___\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" + \"| _ \\\\ || |_ _|\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" + \"| _/ __ || | \\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" + \"|_| |_||_|___| \\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" String greetingMsg \u003d \"Hellos! I\u0027m PHI (Programmed Human Interaction)\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" return logo + greetingMsg;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" * Exit message procedure","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" public String goodbye() {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" return \"okk THANKS FOR COMING BYE!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" * List of all accepted user commands","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" public static String helpMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" return \"Here\u0027s a list of commands:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" + \"1. list (prints out a list of all tasks)\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" + \"2. todo [TASK] (creates a to-do with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" + \"3. deadline [TASK] /by [yyyy-MM-dd] (creates a corresponding deadline with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" + \"4. event [TASK] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" + \" (creates a corresponding event with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" + \"5. mark [X] (marks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" + \"6. unmark [X] (unmarks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" + \"7. delete [X] (removes task X from the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" + \"8. find [KEYWORD] (searches for tasks that contain corresponding KEYWORD)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" + \"9. bye (exits the program)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":43}},{"path":"src/main/java/phi/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.ui.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" * Represents the handling of user-commands and making sense of them","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" * Method that handles parsing user inputs into its respective commands. Helps to check for user-input errors.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" * String output will be handled by the function caller (PHI)","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-input given to PHI","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" * @return Response of the parser to the input, to be printed by PHI","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public String handle(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Bye","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" return ui.goodbye();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" // Handling of List","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" if (!input.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" return (\"Nice job did you mean \\\"list\\\" coz what you gave wasn\u0027t an accepted input\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" return tasks.printList();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Mark","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" return tasks.doTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Unmark","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" return tasks.undoTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Todo","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey nice job, did you mean \\\"todo %s\\\"...\", input.substring(4));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new ToDo(taskMsg, false));","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey genius, did you mean \\\"deadline %s\\\"...\", input.substring(8));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" return \"Look at which moron didn\u0027t add a deadline with the \\\"/by\\\" flag\";","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" int byFlag \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" if (byFlag \u003d\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" return \"Come on you have to fill in something...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.endsWith(\"/by\") || input.endsWith(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" return \"Hey you have to give me a deadline!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(9, byFlag - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" String deadlineString \u003d input.substring(byFlag + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new Deadline(taskMsg, false, deadlineString));","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Event","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"event \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey genius, did you mean \\\"event %s\\\"...\", input.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/from\") \u0026\u0026 !input.contains(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":" return \"Congratulations you\u0027re the only idiot who would leave out both \\\"/from\\\" and \\\"/to\\\" flags\";","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":" return \"You\u0027re missing a \u0027 \\\"/from\\\" flag, halfwit\";","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"phiphi-tan"},"content":" return \"You\u0027re missing a \\\"/to\\\" flag, dimwit\";","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":" int fromFlagStart \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":" int fromFlagEnd \u003d fromFlagStart + 6;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":" int toFlagStart \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":" int toFlagEnd \u003d toFlagStart + 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":" if (fromFlagStart \u003e toFlagStart) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":" return \"Please put the \\\"/from\\\" flag before the \\\"/to\\\" flag, thanksss\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":" } else if (fromFlagStart \u003d\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":" return \"Come on you have to fill in something...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":" } else if (toFlagStart \u003d\u003d fromFlagEnd) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":" return \"Your \\\"/from\\\" flag can\u0027t be empty! Leave a space if you want it blank.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.endsWith(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"phiphi-tan"},"content":" return \"Your \\\"/to\\\" flag can\u0027t be empty! Leave a space if you want it blank.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(6, fromFlagStart - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"phiphi-tan"},"content":" String fromStr \u003d input.substring(fromFlagEnd, toFlagStart - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"phiphi-tan"},"content":" String toStr \u003d input.substring(toFlagEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new Event(taskMsg, false, fromStr, toStr));","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Delete","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"phiphi-tan"},"content":" return tasks.deleteTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Help","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.equals(\"help\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"phiphi-tan"},"content":" return Ui.helpMsg();","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Find","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put something for me to find...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"phiphi-tan"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"phiphi-tan"},"content":" return tasks.findTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"phiphi-tan"},"content":" return (\"SIKE I can\u0027t process that! Try again or say \\\"help\\\" to see a list of all available commands\");","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":131}},{"path":"src/main/java/phi/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" * Represents all storage-related methods (reading from file, checking file paths etc.)","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" private File txtFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" private Path filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Storage instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" * If file / file path does not exist, the .txt file and corresponding directories will be created.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" * @param pathString File path for the saved tasklist.txt file (to be read and written to)","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public Storage(String pathString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" this.txtFile \u003d new File(pathString);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" this.filePath \u003d Paths.get(pathString);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"No file found, new .txt file created!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Reads the input of the stored tasklist .txt file and returns the saved information","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" * @return TaskList object containing the tasks stored in tasklist.txt","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" public TaskList readFromFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" Scanner txtScanner \u003d new Scanner(txtFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" while (txtScanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" tasks.addFromTxt(txtScanner.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" txtScanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"Text file has been scanned!\\n\" + tasks.getSize() + \" items in the list\");","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"Something went wrong... There\u0027s still no file to be found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" return new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" * Writes the output of PHI\u0027s current tasklist to the .txt file in storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" * @param taskInput PHI\u0027s current TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" public void writeToFile(TaskList taskInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" FileWriter output \u003d new FileWriter(txtFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" output.write(taskInput.outputList());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" output.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" e.getStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":78}},{"path":"src/main/java/phi/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" * Represents the task list of the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" private Task getTask(int i) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" if (i \u003c\u003d 0 || i \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" throw new IllegalArgumentException(\"this task does not exist, genius..\");","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" return tasks.get(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" * Marks a task as done and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public String doTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" t.markDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" return \"ALRIGHT NICE I\u0027ll mark this as completed :)\\n\" + t;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException | StringIndexOutOfBoundsException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" return \"OI open ur eyes and give a proper input ITS \\\"mark\\\" AND A NUMBER\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" * Marks a task as undone and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" public String undoTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" t.markUndone();","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" return \"Oh nooo I will mark this undone then :(\\n\" + t;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" return \"OI open ur eyes and give a proper input ITS \\\"unmark\\\" AND A NUMBER\";","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" * Adds a task to the TaskList","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" * @param task Task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" * @return String with the tasklist information","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" return \"Added:\\n\" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" * Deletes a task from the list and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":" public String deleteTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":" System.out.printf(\"Alright say bye bye to task %d!%n\", number);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.remove(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"There\u0027s %d task(s) in the list now.%n\", tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":" return \"Ugh to delete stuff, you have to input \\\"delete\\\" and the number...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"phiphi-tan"},"content":" * Prints the current task list. If list is empty, returns a corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"phiphi-tan"},"content":" * @return String representation of task list","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"phiphi-tan"},"content":" public String printList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"phiphi-tan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"phiphi-tan"},"content":" return \"You do know that to SHOW a list there has to be stuff INSIDE the (currently empty) list right?\";","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"phiphi-tan"},"content":" output.append(String.format(\"%d.%s%n\", tasks.indexOf(t) + 1, t.toString()));","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"phiphi-tan"},"content":" * Adds a task into the list from input given by the stored tasklist.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"phiphi-tan"},"content":" * @param input each individual line of input in the .txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"phiphi-tan"},"content":" public void addFromTxt(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"phiphi-tan"},"content":" Scanner sc \u003d new Scanner(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"phiphi-tan"},"content":" sc.useDelimiter(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"phiphi-tan"},"content":" // parameter handling","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"phiphi-tan"},"content":" String taskType \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"phiphi-tan"},"content":" boolean isComplete \u003d Boolean.parseBoolean(sc.next());","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"phiphi-tan"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"phiphi-tan"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new ToDo(taskMsg, isComplete));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"phiphi-tan"},"content":" // deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"phiphi-tan"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"phiphi-tan"},"content":" String deadline \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new Deadline(taskMsg, isComplete, deadline));","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"phiphi-tan"},"content":" // event task","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"phiphi-tan"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"phiphi-tan"},"content":" String start \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"phiphi-tan"},"content":" String end \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new Event(taskMsg, isComplete, start, end));","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"phiphi-tan"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"something went wrong...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"phiphi-tan"},"content":" * Returns the entire tasklist in output format, to be written by a Storage object.","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"phiphi-tan"},"content":" * @return A String containing the entire task list, formatted in output style.","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"phiphi-tan"},"content":" public String outputList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"phiphi-tan"},"content":" output.append(t.outputFormat()).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"phiphi-tan"},"content":" public int getSize() {","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"phiphi-tan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":170,"author":{"gitId":"phiphi-tan"},"content":" * Returns the list of all tasks that match the given String keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":171,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":172,"author":{"gitId":"phiphi-tan"},"content":" * @param searchString Keyword to be searched for","lastModifiedDate":"2023-09-14"},{"lineNumber":173,"author":{"gitId":"phiphi-tan"},"content":" * @return Concatenated String of all tasks containing argument keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":174,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":175,"author":{"gitId":"phiphi-tan"},"content":" public String findTasks(String searchString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder(\"Here\u0027s all the tasks that match your keyword!\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"phiphi-tan"},"content":" if (t.getMsg().contains(searchString)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"phiphi-tan"},"content":" output.append(t).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":184}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"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/8.0.171\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-font-family: Monospaced;\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"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/8.0.171\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"phi.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"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-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"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-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"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-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":19}},{"path":"src/test/java/phi/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" public void handleInvalidInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"SIKE I can\u0027t process that!\"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" + \" Try again or say \\\"help\\\" to see a list of all available commands\";","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new Parser(new TaskList()).handle(\"invalid\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" public void helpInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"Here\u0027s a list of commands:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" + \"1. list (prints out a list of all tasks)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" + \"2. todo [TASK] (creates a to-do with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" + \"3. deadline [TASK] /by [yyyy-MM-dd] (creates a corresponding deadline with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" + \"4. event [TASK] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\"","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" + \" (creates a corresponding event with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" + \"5. mark [X] (marks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" + \"6. unmark [X] (unmarks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" + \"7. delete [X] (removes task X from the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" + \"8. find [KEYWORD] (searches for tasks that contain corresponding KEYWORD)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" + \"9. bye (exits the program)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new Parser(new TaskList()).handle(\"help\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":32}},{"path":"src/test/java/phi/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" public void markValid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" TaskList test \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" test.addTask(new ToDo(\"coding\", false));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"ALRIGHT NICE I\u0027ll mark this as completed :)\\n[T][X] coding\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, test.doTask(\"mark 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" public void markInvalid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" TaskList test \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" test.addTask(new ToDo(\"coding\", false));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"OI open ur eyes and give a proper input ITS \\\"mark\\\" AND A NUMBER\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, test.doTask(\"mark\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public void todoValid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"Added:\\n[T][ ] coding\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new TaskList().addTask(new ToDo(\"coding\", false)));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":32}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"todo write better code","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"todogiveproperinput","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"deadline get better at coding /by ASAP","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"deadline remember to give the flag","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"deadline /by sometime","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"deadline don\u0027t give a deadline /by","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"event code /from now /to end of time","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"event do something but I didn\u0027t add any flags","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"event forget one flag /to tomorrow","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"event /from here /to then","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"listbutican\u0027tspell","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"marker","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"unacceptableinput","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"delete one","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":21}},{"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":"phiphi-tan"},"content":"java -classpath ..\\bin Phi \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":{"-":20,"phiphi-tan":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"# PHI :dragon_face: :rowboat:","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"\u003e\"Coding is a mental construct, just think more computing thoughts\" - Me","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"*PHI* frees your mind of having to remember things you need to do. It\u0027s","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"- text-based","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"- easy to figure out","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"- encapsulates the very human touch of having somebody exasperated with your improper user inputs.","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"All you need to do is:","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"1. Download the latest release from [here](https://github.com/phiphi-tan/ip/releases)","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"2. Run the .jar file","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"3. Do your stuff and watch it manage your tasks for you","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"Best part of all, it is completely **FREE** (~~unlike its creator\u0027s schedule~~)!","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"Look at all the things it can do:","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"- [x] Managing to-do items","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"- [x] Managing tasks with deadlines","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"- [x] Managing events","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"- [x] Search feature for keywords","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":"- [x] Verbally abuse you if you fail to give proper inputs","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":"- [ ] Reminders (that\u0027s a lie, I\u0027m not doing that)","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"----","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"Since you\u0027re still here, here\u0027s a chunk of code for you to test out your coding abilities:","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" ```java","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" /*","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" Welcome to","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" ___ _ _ ___","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" | _ \\ || |_ _|","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" | _/ __ || | ","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" |_| |_||_|___|","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" PHI (Programmable Human Interface)","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":"public class Main {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"You are a nerd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" } ","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"```","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"phiphi-tan":36,"-":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":"phiphi-tan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"checkstyle {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-14"},{"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":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"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":"phiphi-tan"},"content":" mainClass.set(\"phi.Launcher\")","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" archiveBaseName \u003d \"phi\"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"phiphi-tan":22}},{"path":"changelog.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"# CS2103T Individual Project (iP)","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"This is a project log for my individual project","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" ```","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" Welcome to","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":" ___ _ _ ___","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" | _ \\ || |_ _|","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" | _/ __ || | ","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" |_| |_||_|___|","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" PHI (Programmable Human Interface)","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" ```","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"---","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"## Main Increments","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"### Level 0. Rename, Greet, Exit","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"- Chatbot was created and given the name Phi","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"- Greets the user and exits the program","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"### Level 1. Echo","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"- PHI now echoes commands entered by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"- Exits when the user types the command _bye_","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":"### Level 2. Add, List","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"- Text entered by the user will be saved as a task","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"- Tasks are displayed in a list upon command _list_","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"### Level 3. Mark as Done","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"- Tasks can now be marked as done (and undone)","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"### Level 4. ToDos, Events, Deadlines","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"- Tasks are now classified under one of three types:","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" - ToDos: Tasks without any date/time","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" - Deadlines: Tasks to be done before a specified deadline","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" - Events: Tasks that start and end at a specified time","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" ","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":"### Level 5. Handle Errors","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"- PHI can deal with basic-level errors (incorrect inputs) entered by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":"### Level 6. Delete","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":"- Tasks can now be deleted from the list","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":"### Level 7. Save","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":"- Tasks are saved in storage whenever any changes are made to the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":"- Data from the tasklist is loaded from the storage when PHI starts (_./data/tasklist.txt_)","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":"### Level 8. Dates and Times","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":"- Deadline/Event dates can now be understood in yyyy-MM-dd format, and are displayed back as MMM dd yyyy","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" - Non-recognised formats will continue to be saved as a String","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":"### Level 9. Find","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":"- Users can now find tasks by searching for a keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":"### Level 10. GUI","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":"- Added Graphical User Interface (GUI) to the chatbot using JavaFX technology","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":"## Other Increments","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":"### Automated Text UI Testing","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":"- Testing of PHI is semi-automated through I/O redirection (text-ui-test)","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":"### Enumerations","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":"- Enumerations used for the Tasks data-type","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":"### More OOP","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":"- Extraction of code as classes for more Object-Oriented-Programming (OOP)","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" - Creating/Refining the following classes (Ui, Storage, Parser, TaskList)","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":"### Packages","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":"- Classes in PHI are organised into suitable java packages","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" - Currently, all classes are in one package (_phi_)","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" ","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":"### Gradle","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":"- Support for Gradle added to PHI, allowing automation of some build/run tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":"### JUnit Tests","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":"- JUnit tests created to test code behaviour","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":"### JAR File","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":"- **phi.jar v1.0.0** released","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" - PHI packaged into an executable JAR file (built using Gradle) for easier distribution","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" - ","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":"### JavaDoc","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":"- JavaDoc header comments added to all classes and all non-trivial methods","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":"### Coding Standard","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":"- Code should now comply with the given coding standard for this project","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"phiphi-tan"},"content":"### Checkstyle","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"phiphi-tan"},"content":"- CheckStyle now incorporated to detect coding style violations. Configured to be used with Gradle","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"phiphi-tan":100}},{"path":"data/tasklist.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"T|true|cry","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"T|false|coding homework","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"D|false|get better at coding|ASAP","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"E|false|more coding|now|end of time","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"D|true|something|Dec 03 2011","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"T|false|code","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":6}},{"path":"src/main/java/phi/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":12}},{"path":"src/main/java/phi/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import phi.ui.MainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" * A GUI for Phi using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" private Phi phi \u003d new Phi();","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setPhi(phi);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" stage.show();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":32}},{"path":"src/main/java/phi/Phi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import phi.ui.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" * Represents the core of the PHI chatbot. The root of the program will run from here.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" * @author phiphi-tan","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"public class Phi {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new instance of Phi","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" * Storage is loaded with the hardcoded file path of the .txt file","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" public Phi() {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" taskStorage \u003d new Storage(\"./data/tasklist.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" tasks \u003d taskStorage.readFromFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" this.parser \u003d new Parser(tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" new Phi().run();","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(ui.greeting());","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" takeInput();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(ui.goodbye());","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Abstraction for the user-input handling process, which will continue running until the input \"bye\" is received","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" private void takeInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(this.parser.handle(input));","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" taskStorage.writeToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" System.out.println();","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" * Generates response to user input, and writes data to file after","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" String response \u003d this.parser.handle(input.trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" taskStorage.writeToFile(tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" return response;","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":68}},{"path":"src/main/java/phi/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * Represents the Deadline task type, and contains a String with a user-specified date as the deadline of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" private String deadlineString;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Deadline instance","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" * @param msg Task message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param isDone Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @param deadline User-specified deadline of task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" public Deadline(String msg, boolean isDone, String deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" super(Type.D, isDone, msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" this.deadlineString \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" LocalDate deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter outputFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" deadlineDate \u003d LocalDate.parse(deadlineString, inputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" this.deadlineString \u003d deadlineDate.format(outputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" //System.out.println(\"Can\u0027t find a proper date format, using deadline as a String\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" return super.toString() + String.format(\" (by: %s)\", deadlineString);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" public String outputFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"%s|%b|%s|%s\", taskType.toString(), done, taskName, deadlineString);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":47}},{"path":"src/main/java/phi/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * Represents the Event task type, and contains two Strings with user-specified dates as the start and end of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" private String start;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" private String end;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Event instance","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param msg Message to be displayed","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @param isDone Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" * @param start User-specified start time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" * @param end User-specified end time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" public Event(String msg, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" super(Type.E, isDone, msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" LocalDate startDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" LocalDate endDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" DateTimeFormatter outputFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" startDate \u003d LocalDate.parse(start, inputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" this.start \u003d startDate.format(outputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" //System.out.println(\"Can\u0027t find a proper date format, using /from input as a String\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" endDate \u003d LocalDate.parse(end, inputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" this.end \u003d endDate.format(outputFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" //System.out.println(\"Can\u0027t find a proper date format, using /to input as a String\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" return super.toString() + String.format(\" (from: %s to: %s)\", start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" public String outputFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"%s|%b|%s|%s|%s\", taskType.toString(), done, taskName, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":59}},{"path":"src/main/java/phi/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Abstract parent class of all task types. Cannot be instantiated.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" protected enum Type { T, D, E }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" protected Type taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" protected boolean done;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" protected String taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Task","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" * @param taskType Type of task (ToDo, Deadline, Event) in enumerated type","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param done Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @param taskName Task message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" public Task(Type taskType, boolean done, String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" this.done \u003d done;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public void markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" return done","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" ? String.format(\"[%s][X] %s\", taskType, taskName)","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" : String.format(\"[%s][ ] %s\", taskType, taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Returns the task in a String, formatted in the style that will be written to storage","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" * @return String representation of the task in output format","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" public abstract String outputFormat();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" public String getMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" return this.taskName;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":51}},{"path":"src/main/java/phi/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.task;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Represents the ToDo task type","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new ToDo instance","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" * @param msg Task message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" * @param isDone Boolean determining if task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" public ToDo(String msg, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" super(Type.T, isDone, msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" public String outputFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"%s|%b|%s\", taskType.toString(), done, taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":28}},{"path":"src/main/java/phi/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" // System.out.println(\"This is the text: \" + text);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" public static DialogBox getPhiDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":62}},{"path":"src/main/java/phi/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"import phi.Phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" private final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" private Phi phi;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.jpeg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" private final Image phiImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/phi.jpeg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" // add the greeting","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" dialogContainer.getChildren().add(DialogBox.getPhiDialog(ui.greeting(), phiImage));","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" public void setPhi(Phi p) {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" this.phi \u003d p;","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing PHI\u0027s reply and then appends them to","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(1)); // 1 second delay","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" // Close the JavaFX application after the delay","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" Platform.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" });","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" pause.play();","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" String response \u003d phi.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" DialogBox.getPhiDialog(response, phiImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":65}},{"path":"src/main/java/phi/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Represents user interactions","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * Greeting message procedure","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" public String greeting() {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" String logo \u003d \" ___ _ _ ___\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" + \"| _ \\\\ || |_ _|\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" + \"| _/ __ || | \\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" + \"|_| |_||_|___| \\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" String greetingMsg \u003d \"Hellos! I\u0027m PHI (Programmed Human Interaction)\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" return logo + greetingMsg;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" * Exit message procedure","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" public String goodbye() {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" return \"okk THANKS FOR COMING BYE!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" * List of all accepted user commands","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" public static String helpMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" return \"Here\u0027s a list of commands:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" + \"1. list (prints out a list of all tasks)\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" + \"2. todo [TASK] (creates a to-do with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" + \"3. deadline [TASK] /by [yyyy-MM-dd] (creates a corresponding deadline with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" + \"4. event [TASK] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" + \" (creates a corresponding event with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" + \"5. mark [X] (marks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" + \"6. unmark [X] (unmarks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" + \"7. delete [X] (removes task X from the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" + \"8. find [KEYWORD] (searches for tasks that contain corresponding KEYWORD)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" + \"9. bye (exits the program)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":43}},{"path":"src/main/java/phi/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.ui.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" * Represents the handling of user-commands and making sense of them","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" * Method that handles parsing user inputs into its respective commands. Helps to check for user-input errors.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" * String output will be handled by the function caller (PHI)","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-input given to PHI","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" * @return Response of the parser to the input, to be printed by PHI","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public String handle(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Bye","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" return ui.goodbye();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" // Handling of List","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" if (!input.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" return (\"Nice job did you mean \\\"list\\\" coz what you gave wasn\u0027t an accepted input\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" return tasks.printList();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Mark","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" return tasks.doTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Unmark","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" return tasks.undoTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Todo","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey nice job, did you mean \\\"todo %s\\\"...\", input.substring(4));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new ToDo(taskMsg, false));","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey genius, did you mean \\\"deadline %s\\\"...\", input.substring(8));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" return \"Look at which moron didn\u0027t add a deadline with the \\\"/by\\\" flag\";","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" int byFlag \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" if (byFlag \u003d\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" return \"Come on you have to fill in something...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.endsWith(\"/by\") || input.endsWith(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" return \"Hey you have to give me a deadline!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(9, byFlag - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" String deadlineString \u003d input.substring(byFlag + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new Deadline(taskMsg, false, deadlineString));","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Event","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"event \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey genius, did you mean \\\"event %s\\\"...\", input.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/from\") \u0026\u0026 !input.contains(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":" return \"Congratulations you\u0027re the only idiot who would leave out both \\\"/from\\\" and \\\"/to\\\" flags\";","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":" return \"You\u0027re missing a \u0027 \\\"/from\\\" flag, halfwit\";","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"phiphi-tan"},"content":" return \"You\u0027re missing a \\\"/to\\\" flag, dimwit\";","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":" int fromFlagStart \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":" int fromFlagEnd \u003d fromFlagStart + 6;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":" int toFlagStart \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":" int toFlagEnd \u003d toFlagStart + 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":" if (fromFlagStart \u003e toFlagStart) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":" return \"Please put the \\\"/from\\\" flag before the \\\"/to\\\" flag, thanksss\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":" } else if (fromFlagStart \u003d\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":" return \"Come on you have to fill in something...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":" } else if (toFlagStart \u003d\u003d fromFlagEnd) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":" return \"Your \\\"/from\\\" flag can\u0027t be empty! Leave a space if you want it blank.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.endsWith(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"phiphi-tan"},"content":" return \"Your \\\"/to\\\" flag can\u0027t be empty! Leave a space if you want it blank.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(6, fromFlagStart - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"phiphi-tan"},"content":" String fromStr \u003d input.substring(fromFlagEnd, toFlagStart - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"phiphi-tan"},"content":" String toStr \u003d input.substring(toFlagEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new Event(taskMsg, false, fromStr, toStr));","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Delete","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"phiphi-tan"},"content":" return tasks.deleteTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Help","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.equals(\"help\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"phiphi-tan"},"content":" return Ui.helpMsg();","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Find","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put something for me to find...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"phiphi-tan"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"phiphi-tan"},"content":" return tasks.findTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"phiphi-tan"},"content":" return (\"SIKE I can\u0027t process that! Try again or say \\\"help\\\" to see a list of all available commands\");","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":131}},{"path":"src/main/java/phi/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" * Represents all storage-related methods (reading from file, checking file paths etc.)","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" private File txtFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" private Path filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Storage instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" * If file / file path does not exist, the .txt file and corresponding directories will be created.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" * @param pathString File path for the saved tasklist.txt file (to be read and written to)","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public Storage(String pathString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" this.txtFile \u003d new File(pathString);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" this.filePath \u003d Paths.get(pathString);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"No file found, new .txt file created!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * Reads the input of the stored tasklist .txt file and returns the saved information","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" * @return TaskList object containing the tasks stored in tasklist.txt","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" public TaskList readFromFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" Scanner txtScanner \u003d new Scanner(txtFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" while (txtScanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" tasks.addFromTxt(txtScanner.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" txtScanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"Text file has been scanned!\\n\" + tasks.getSize() + \" items in the list\");","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"Something went wrong... There\u0027s still no file to be found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" return new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" * Writes the output of PHI\u0027s current tasklist to the .txt file in storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" * @param taskInput PHI\u0027s current TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" public void writeToFile(TaskList taskInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" FileWriter output \u003d new FileWriter(txtFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" output.write(taskInput.outputList());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" output.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" e.getStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":78}},{"path":"src/main/java/phi/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" * Represents the task list of the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" private Task getTask(int i) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" if (i \u003c\u003d 0 || i \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" throw new IllegalArgumentException(\"this task does not exist, genius..\");","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" return tasks.get(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" * Marks a task as done and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" public String doTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" t.markDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" return \"ALRIGHT NICE I\u0027ll mark this as completed :)\\n\" + t;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException | StringIndexOutOfBoundsException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" return \"OI open ur eyes and give a proper input ITS \\\"mark\\\" AND A NUMBER\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" * Marks a task as undone and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" public String undoTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" t.markUndone();","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" return \"Oh nooo I will mark this undone then :(\\n\" + t;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" return \"OI open ur eyes and give a proper input ITS \\\"unmark\\\" AND A NUMBER\";","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" * Adds a task to the TaskList","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" * @param task Task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" * @return String with the tasklist information","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" return \"Added:\\n\" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" * Deletes a task from the list and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":" public String deleteTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":" System.out.printf(\"Alright say bye bye to task %d!%n\", number);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.remove(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"There\u0027s %d task(s) in the list now.%n\", tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":" return \"Ugh to delete stuff, you have to input \\\"delete\\\" and the number...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"phiphi-tan"},"content":" * Prints the current task list. If list is empty, returns a corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"phiphi-tan"},"content":" * @return String representation of task list","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"phiphi-tan"},"content":" public String printList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"phiphi-tan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"phiphi-tan"},"content":" return \"You do know that to SHOW a list there has to be stuff INSIDE the (currently empty) list right?\";","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"phiphi-tan"},"content":" output.append(String.format(\"%d.%s%n\", tasks.indexOf(t) + 1, t.toString()));","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"phiphi-tan"},"content":" * Adds a task into the list from input given by the stored tasklist.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"phiphi-tan"},"content":" * @param input each individual line of input in the .txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"phiphi-tan"},"content":" public void addFromTxt(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"phiphi-tan"},"content":" Scanner sc \u003d new Scanner(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"phiphi-tan"},"content":" sc.useDelimiter(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"phiphi-tan"},"content":" // parameter handling","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"phiphi-tan"},"content":" String taskType \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"phiphi-tan"},"content":" boolean isComplete \u003d Boolean.parseBoolean(sc.next());","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"phiphi-tan"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"phiphi-tan"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new ToDo(taskMsg, isComplete));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"phiphi-tan"},"content":" // deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"phiphi-tan"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"phiphi-tan"},"content":" String deadline \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new Deadline(taskMsg, isComplete, deadline));","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"phiphi-tan"},"content":" // event task","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"phiphi-tan"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"phiphi-tan"},"content":" String start \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"phiphi-tan"},"content":" String end \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new Event(taskMsg, isComplete, start, end));","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"phiphi-tan"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"something went wrong...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"phiphi-tan"},"content":" * Returns the entire tasklist in output format, to be written by a Storage object.","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"phiphi-tan"},"content":" * @return A String containing the entire task list, formatted in output style.","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"phiphi-tan"},"content":" public String outputList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"phiphi-tan"},"content":" output.append(t.outputFormat()).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"phiphi-tan"},"content":" public int getSize() {","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"phiphi-tan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":170,"author":{"gitId":"phiphi-tan"},"content":" * Returns the list of all tasks that match the given String keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":171,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":172,"author":{"gitId":"phiphi-tan"},"content":" * @param searchString Keyword to be searched for","lastModifiedDate":"2023-09-14"},{"lineNumber":173,"author":{"gitId":"phiphi-tan"},"content":" * @return Concatenated String of all tasks containing argument keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":174,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":175,"author":{"gitId":"phiphi-tan"},"content":" public String findTasks(String searchString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder(\"Here\u0027s all the tasks that match your keyword!\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"phiphi-tan"},"content":" if (t.getMsg().contains(searchString)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"phiphi-tan"},"content":" output.append(t).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":184}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"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/8.0.171\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-font-family: Monospaced;\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"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/8.0.171\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"phi.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"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-16"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"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-16"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"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-16"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"phiphi-tan":19}},{"path":"src/test/java/phi/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" public void handleInvalidInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"SIKE I can\u0027t process that!\"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" + \" Try again or say \\\"help\\\" to see a list of all available commands\";","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new Parser(new TaskList()).handle(\"invalid\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" public void helpInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"Here\u0027s a list of commands:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" + \"1. list (prints out a list of all tasks)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" + \"2. todo [TASK] (creates a to-do with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" + \"3. deadline [TASK] /by [yyyy-MM-dd] (creates a corresponding deadline with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" + \"4. event [TASK] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\"","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" + \" (creates a corresponding event with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" + \"5. mark [X] (marks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" + \"6. unmark [X] (unmarks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" + \"7. delete [X] (removes task X from the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" + \"8. find [KEYWORD] (searches for tasks that contain corresponding KEYWORD)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" + \"9. bye (exits the program)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new Parser(new TaskList()).handle(\"help\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":32}},{"path":"src/test/java/phi/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"package phi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import phi.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import phi.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" public void markValid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" TaskList test \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" test.addTask(new ToDo(\"coding\", false));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"ALRIGHT NICE I\u0027ll mark this as completed :)\\n[T][X] coding\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, test.doTask(\"mark 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" public void markInvalid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" TaskList test \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" test.addTask(new ToDo(\"coding\", false));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"OI open ur eyes and give a proper input ITS \\\"mark\\\" AND A NUMBER\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, test.doTask(\"mark\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" public void todoValid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"Added:\\n[T][ ] coding\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new TaskList().addTask(new ToDo(\"coding\", false)));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":32}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"phiphi-tan"},"content":"todo write better code","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"phiphi-tan"},"content":"todogiveproperinput","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"phiphi-tan"},"content":"deadline get better at coding /by ASAP","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"deadline remember to give the flag","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"deadline /by sometime","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"deadline don\u0027t give a deadline /by","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"event code /from now /to end of time","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"event do something but I didn\u0027t add any flags","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"event forget one flag /to tomorrow","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"event /from here /to then","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"listbutican\u0027tspell","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"marker","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":"unacceptableinput","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":"delete one","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":21}},{"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":"phiphi-tan"},"content":"java -classpath ..\\bin Phi \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":{"-":20,"phiphi-tan":1}}] diff --git a/phiphi-tan_ip_master/commits.json b/phiphi-tan_ip_master/commits.json index 75da3c61..f0af25c0 100644 --- a/phiphi-tan_ip_master/commits.json +++ b/phiphi-tan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"phiphi-tan":[{"date":"2023-08-22","commitResults":[{"hash":"90fb8bab85741b25fa27852921b46a16ae815a80","isMergeCommit":false,"messageTitle":"\"Level-0 Commit\"","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"1393a7785e18178279367fb703cb90c296c949d0","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":10}}},{"hash":"b34dc9ec462593efca7c72ce8295e6f601d400d9","isMergeCommit":true,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8f8779fac736ae39f29f6511f837b17ce1ed1d57","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}}]},{"date":"2023-08-23","commitResults":[{"hash":"c41cd6d4fe9f045d5e2b657a0834a8d55c487ec4","isMergeCommit":false,"messageTitle":"Level-3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":14}}},{"hash":"e18c794b3a9a3a27ef64f5dd46c6dc0a30afa381","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":25}}},{"hash":"a1fbcfbc2d3a13d1db827ecda13adc16b1e4ccc6","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":2},"bat":{"insertions":1,"deletions":1}}},{"hash":"531019e7dbc30b5c3f3254d87e2ece36b5940154","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":6},"java":{"insertions":77,"deletions":26}}},{"hash":"e459417fa0de8c144561099ae388e157416a1ccb","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":35,"deletions":12}}},{"hash":"c79f76cfa11a343c22fd2be00602a592cccd83bf","isMergeCommit":false,"messageTitle":"A-Enums: Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":38,"deletions":18}}}]},{"date":"2023-08-31","commitResults":[{"hash":"472439bd3fa889bd67e0be5949a9c7392462b6a7","isMergeCommit":false,"messageTitle":"Added ./data/tasklist.txt and read/write functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":100,"deletions":10}}},{"hash":"cd203ae84b62cd161c0db9c3e890243c974f0477","isMergeCommit":false,"messageTitle":"Added proper abstraction and support for FileNotFound exceptions","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":21,"deletions":13}}},{"hash":"017ed8ef4089143f618f892f8f0e9607187ac897","isMergeCommit":false,"messageTitle":"Updated Deadline.java and Event.java for LocalDate handling","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":56,"deletions":12}}}]},{"date":"2023-09-01","commitResults":[{"hash":"93b405d95cd1e929c14adced941abcb3aa6cc5b3","isMergeCommit":false,"messageTitle":"Added Parser.java, Storage.java, Ui.java for more OOP abstractions","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":113,"deletions":86}}},{"hash":"7a6b2134bc8dbc2f420c6bbb98cf29074398de41","isMergeCommit":false,"messageTitle":"Organised classes into a single package and fixed access modifiers","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":21}}},{"hash":"7268044d51c644dec581650d114f7f20d525f794","isMergeCommit":false,"messageTitle":"Added gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"60744b3dba2c16e4903b77776696454de54e4105","isMergeCommit":false,"messageTitle":"Added JUnit tests and fixed code accordingly","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":94,"deletions":32}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f0d931daaa1ea973bc0aa393e44ef53ece79a135","isMergeCommit":false,"messageTitle":"Updated code for .jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":47,"deletions":24}}},{"hash":"f97f456390355e6c20c144584042b49b692f3b7e","isMergeCommit":false,"messageTitle":"Updated README.md as a project log","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":85,"deletions":20}}},{"hash":"2a6c79e16d5f7eea1297f76a9f8f9d494411589f","isMergeCommit":false,"messageTitle":"Added JavaDoc comments to all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":220,"deletions":51},"md":{"insertions":3,"deletions":0}}},{"hash":"2e9a250dc061e2b3f894757fb4e00f74bb4e0131","isMergeCommit":false,"messageTitle":"Made slight changes to comply with coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":51}}},{"hash":"16426aef941db852af8d62ea7acdbb24bccd76b4","isMergeCommit":false,"messageTitle":"Added basic search functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"54b0d2a70709e6511f94fc3bc4bf7812d7e2fe0d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/phi/Storage.java\n#\tsrc/main/java/phi/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"78d4966c7cce2efd4462914534add11ade3a9d27","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41ac67c89a2bbf9d876d5f71b0aabb1dd032782a","isMergeCommit":false,"messageTitle":"Updated README.md and cleaned up code","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":21,"deletions":15},"md":{"insertions":6,"deletions":0}}}]},{"date":"2023-09-14","commitResults":[{"hash":"a52ef068b50be91b3f0184dfdde48cc1927c94f1","isMergeCommit":false,"messageTitle":"Updated README.md and added the changelog","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":7},"md":{"insertions":130,"deletions":92}}},{"hash":"4bbb811486fda35d8ce734dc6fd754c4cf9a4064","isMergeCommit":false,"messageTitle":"Implement checkStyle (with Gradle) and fix styling errors","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":58,"deletions":39},"md":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"ca0ed7367183297026473b81390bc995f55e7e5e","isMergeCommit":false,"messageTitle":"Add GUI using JavaFX","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":216,"deletions":24}}},{"hash":"7769f2b29169ec6f423e76c8017f9d6a05641a5d","isMergeCommit":false,"messageTitle":"Package classes further and tidy code","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":41,"deletions":19}}}]}]},"authorFileTypeContributionMap":{"phiphi-tan":{"java":924,"md":132,"fxml":35,"sh":0,"bat":1,"gradle":22,"txt":27}},"authorContributionVariance":{"phiphi-tan":27842.371},"authorDisplayNameMap":{"phiphi-tan":"CS2103T-W15-4 PHIN.. TAN"}} +{"authorDailyContributionsMap":{"phiphi-tan":[{"date":"2023-08-22","commitResults":[{"hash":"90fb8bab85741b25fa27852921b46a16ae815a80","isMergeCommit":false,"messageTitle":"\"Level-0 Commit\"","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"1393a7785e18178279367fb703cb90c296c949d0","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":10}}},{"hash":"b34dc9ec462593efca7c72ce8295e6f601d400d9","isMergeCommit":true,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8f8779fac736ae39f29f6511f837b17ce1ed1d57","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}}]},{"date":"2023-08-23","commitResults":[{"hash":"c41cd6d4fe9f045d5e2b657a0834a8d55c487ec4","isMergeCommit":false,"messageTitle":"Level-3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":14}}},{"hash":"e18c794b3a9a3a27ef64f5dd46c6dc0a30afa381","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":25}}},{"hash":"a1fbcfbc2d3a13d1db827ecda13adc16b1e4ccc6","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":2},"bat":{"insertions":1,"deletions":1}}},{"hash":"531019e7dbc30b5c3f3254d87e2ece36b5940154","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":6},"java":{"insertions":77,"deletions":26}}},{"hash":"e459417fa0de8c144561099ae388e157416a1ccb","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":35,"deletions":12}}},{"hash":"c79f76cfa11a343c22fd2be00602a592cccd83bf","isMergeCommit":false,"messageTitle":"A-Enums: Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":38,"deletions":18}}}]},{"date":"2023-08-31","commitResults":[{"hash":"472439bd3fa889bd67e0be5949a9c7392462b6a7","isMergeCommit":false,"messageTitle":"Added ./data/tasklist.txt and read/write functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":100,"deletions":10}}},{"hash":"cd203ae84b62cd161c0db9c3e890243c974f0477","isMergeCommit":false,"messageTitle":"Added proper abstraction and support for FileNotFound exceptions","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":21,"deletions":13}}},{"hash":"017ed8ef4089143f618f892f8f0e9607187ac897","isMergeCommit":false,"messageTitle":"Updated Deadline.java and Event.java for LocalDate handling","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":56,"deletions":12}}}]},{"date":"2023-09-01","commitResults":[{"hash":"93b405d95cd1e929c14adced941abcb3aa6cc5b3","isMergeCommit":false,"messageTitle":"Added Parser.java, Storage.java, Ui.java for more OOP abstractions","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":113,"deletions":86}}},{"hash":"7a6b2134bc8dbc2f420c6bbb98cf29074398de41","isMergeCommit":false,"messageTitle":"Organised classes into a single package and fixed access modifiers","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":21}}},{"hash":"7268044d51c644dec581650d114f7f20d525f794","isMergeCommit":false,"messageTitle":"Added gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"60744b3dba2c16e4903b77776696454de54e4105","isMergeCommit":false,"messageTitle":"Added JUnit tests and fixed code accordingly","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":94,"deletions":32}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f0d931daaa1ea973bc0aa393e44ef53ece79a135","isMergeCommit":false,"messageTitle":"Updated code for .jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":47,"deletions":24}}},{"hash":"f97f456390355e6c20c144584042b49b692f3b7e","isMergeCommit":false,"messageTitle":"Updated README.md as a project log","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":85,"deletions":20}}},{"hash":"2a6c79e16d5f7eea1297f76a9f8f9d494411589f","isMergeCommit":false,"messageTitle":"Added JavaDoc comments to all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":220,"deletions":51},"md":{"insertions":3,"deletions":0}}},{"hash":"2e9a250dc061e2b3f894757fb4e00f74bb4e0131","isMergeCommit":false,"messageTitle":"Made slight changes to comply with coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":51}}},{"hash":"16426aef941db852af8d62ea7acdbb24bccd76b4","isMergeCommit":false,"messageTitle":"Added basic search functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"54b0d2a70709e6511f94fc3bc4bf7812d7e2fe0d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/phi/Storage.java\n#\tsrc/main/java/phi/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"78d4966c7cce2efd4462914534add11ade3a9d27","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41ac67c89a2bbf9d876d5f71b0aabb1dd032782a","isMergeCommit":false,"messageTitle":"Updated README.md and cleaned up code","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":21,"deletions":15},"md":{"insertions":6,"deletions":0}}}]},{"date":"2023-09-14","commitResults":[{"hash":"a52ef068b50be91b3f0184dfdde48cc1927c94f1","isMergeCommit":false,"messageTitle":"Updated README.md and added the changelog","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":7},"md":{"insertions":130,"deletions":92}}},{"hash":"4bbb811486fda35d8ce734dc6fd754c4cf9a4064","isMergeCommit":false,"messageTitle":"Implement checkStyle (with Gradle) and fix styling errors","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":58,"deletions":39},"md":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"ca0ed7367183297026473b81390bc995f55e7e5e","isMergeCommit":false,"messageTitle":"Add GUI using JavaFX","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":216,"deletions":24}}},{"hash":"7769f2b29169ec6f423e76c8017f9d6a05641a5d","isMergeCommit":false,"messageTitle":"Package classes further and tidy code","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":41,"deletions":19}}}]},{"date":"2023-09-18","commitResults":[{"hash":"ed07f1128bb4140169d9b0853e4865691b73ef8a","isMergeCommit":false,"messageTitle":"Update build.gradle, README and changelog for new release","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"md":{"insertions":8,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"phiphi-tan":{"java":924,"md":136,"fxml":35,"sh":0,"bat":1,"gradle":22,"txt":27}},"authorContributionVariance":{"phiphi-tan":26433.729},"authorDisplayNameMap":{"phiphi-tan":"CS2103T-W15-4 PHIN.. TAN"}} diff --git a/ravern_ip_master/commits.json b/ravern_ip_master/commits.json index 67239283..038375e1 100644 --- a/ravern_ip_master/commits.json +++ b/ravern_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ravern":[{"date":"2023-08-22","commitResults":[{"hash":"ac6eff5f562bb5fef20929f48e8a39596f465d53","isMergeCommit":false,"messageTitle":"Rename chatbot to Ekud","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"712ed9441a90db370e5ad5f87036ef66288b6017","isMergeCommit":false,"messageTitle":"Add echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"fda2240e0300bed7389f105fd37973f6e8b2abcd","isMergeCommit":false,"messageTitle":"Add adding and listing functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":9}}},{"hash":"74da177367379d205f50c2be137244b42b32a6f6","isMergeCommit":false,"messageTitle":"Add (un)marking functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":2}}},{"hash":"022062dd47bb79efcdb9ad2ae8ab5cf773fb24cb","isMergeCommit":false,"messageTitle":"Refactor line processing and split tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":47}}},{"hash":"d48b93da4408f4c9d09849f54ea9e367730cb717","isMergeCommit":false,"messageTitle":"Refactor command parsing and add different task types","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":352,"deletions":96}}}]},{"date":"2023-08-23","commitResults":[{"hash":"6e2e871cfe53b757b81ac7989c61b97669fcdde4","isMergeCommit":false,"messageTitle":"Refactor to improve Store abstraction","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":23}}},{"hash":"30eedde628d74094cbca77a50d43ab3e5362fe32","isMergeCommit":false,"messageTitle":"Refine main file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":18}}},{"hash":"0f3bb833f14fd88541147f42e198e89abe20709b","isMergeCommit":false,"messageTitle":"Update tests to latest","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":3,"deletions":7}}},{"hash":"e4a654c0a6101abc87c2da94bbe2543d1d7d61bc","isMergeCommit":false,"messageTitle":"Improve and simplify error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":17}}},{"hash":"60958d461d3c0facef994773cdbb47498449c1a4","isMergeCommit":false,"messageTitle":"Add delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":42,"deletions":11}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c7fb5a232200f38bdf420b5c1903d5196ec14cc4","isMergeCommit":false,"messageTitle":"Refactor program into state machine","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":596,"deletions":359}}},{"hash":"5fd3cf352ae4878ed3f74437270cf892eb9ee8e2","isMergeCommit":false,"messageTitle":"Add ability to save to a file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":0},"java":{"insertions":59,"deletions":6}}},{"hash":"e9e24ac52d586c5ec8d63e6ef141ebb3ea1b5d27","isMergeCommit":false,"messageTitle":"Fix option slash to be forward not backward","messageBody":"Add ignore for data files\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":17},"java":{"insertions":5,"deletions":4}}},{"hash":"8df90abe25711a88fb762482fca9a843fce1ac34","isMergeCommit":false,"messageTitle":"Add basic DateTime parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":20}}},{"hash":"428337b1f990365c9638d751ef98b8d70def17c0","isMergeCommit":false,"messageTitle":"Add DateTime util to handle parsing and formatting","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":85,"deletions":43}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e693712ac1e15e75d73c1946598959d16c57b767","isMergeCommit":false,"messageTitle":"Refactor with Ui, Storage, TaskList, Parser class","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":528,"deletions":455},"sh":{"insertions":1,"deletions":1}}},{"hash":"eaa10a7a81bda53a3ccf130a01fc161e6b025880","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"92efce4fc2bdde14f56ca2e64487897f772f6805","isMergeCommit":false,"messageTitle":"Modify build.gradle for renamed app","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4}}},{"hash":"eee665f5dffc8e3cbe39060c2fa7319e00c98b05","isMergeCommit":false,"messageTitle":"Add tests for Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"b34cb38a0d52e0b319ae642184a5c6826f072df4","isMergeCommit":false,"messageTitle":"Fix to only write mutating commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"827745eb80257648e9351ffd8387259e5c97dbb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Jar","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4d0355813178a4e01c779f8aff065a6f911e2688","isMergeCommit":false,"messageTitle":"Add DateTime getters and test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":1}}},{"hash":"4d25156f23e777800e57147697061f0b59063587","isMergeCommit":false,"messageTitle":"Add test for Parser","messageBody":"","tags":["A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"0a6da97c66ffdd5c21f7f69c230e1387776f48fb","isMergeCommit":false,"messageTitle":"Add Javadoc for command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":0}}},{"hash":"299134e54e14c183e1eae1609129227f7b3d218a","isMergeCommit":false,"messageTitle":"Add Javadoc for handler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"b68d3e2cd7cb0be996df5287e04bc3879621aaa9","isMergeCommit":false,"messageTitle":"Add Javadoc for state","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":18}}},{"hash":"0a0a02f652a885350cd599d3dde3fff6b239c816","isMergeCommit":false,"messageTitle":"Add Javadoc for remaining classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":0}}},{"hash":"21a76fa6702bb21d423898ec82df1533ae4ec072","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"e0be2b1d6f37c442cd893d0e51f02e88d44db2e6","isMergeCommit":false,"messageTitle":"Update text ui tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"sh":{"insertions":9,"deletions":9}}},{"hash":"cdf8360b53348aa8f4d71abebb364f54dfafca8d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/ekud/state/TaskList.java\n#\tsrc/main/java/ekud/ui/Ui.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"2b1f4c5c324ba251ac013fc51737a3482cc817d2","isMergeCommit":false,"messageTitle":"add basic gui impl","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":240,"deletions":72}}},{"hash":"01a3f3af5e8f60d5700f81857035cc8b79767404","isMergeCommit":false,"messageTitle":"add bot and human images","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":7}}},{"hash":"79162f2d514aac892fc609b95b5ec10959ad6ece","isMergeCommit":false,"messageTitle":"refine bot and human messages","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":35}}},{"hash":"6757efad1db3a973e5b3a0e186eda4d79de4a711","isMergeCommit":false,"messageTitle":"remove text-ui-testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":13},"sh":{"insertions":0,"deletions":34}}}]},{"date":"2023-09-12","commitResults":[{"hash":"694f4fcd003b32f2753e969cc307449dde11d776","isMergeCommit":false,"messageTitle":"Fix gradle build issues for uber jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0}}},{"hash":"bed679cbae56f3929289e7a6734051219e0028f4","isMergeCommit":false,"messageTitle":"Add assertions for non-empty text","messageBody":"Before this commit, asserting that the text given to the parseComponent and parseCommand functions was done by checking for non-emptiness and throwing an IllegalArgumentException. While this was desirable behavior, I believe assertions are better suited for the task.\n\nThis is because this non-empty invariant should be upholded by the programmer who is building Ekud and not the user of the program. Throwing an exception might result in it getting caught by a regular try-catch and eventually being displayed to the user, which is not the purpose of this check.\n\nTherefore, we switch to using assertions here instead of a simple IllegalArgumentException.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":8}}},{"hash":"df1a4ee90438c8f308fc0f844830879050a26797","isMergeCommit":false,"messageTitle":"Remove redundant import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"5ee6e2b086f03c73244c0ac10c040811b11d8903","isMergeCommit":false,"messageTitle":"Fix switch case indentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":49}}},{"hash":"db94acc4fbb39304e912129dee33ec3541ec899e","isMergeCommit":false,"messageTitle":"Rename mark and unmark methods to be more descriptive","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"d2a3d68484d292932554ee7e8a97d5b76957a0b3","isMergeCommit":false,"messageTitle":"Add Javadoc to Task constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"1f38af98281413f2ab4948bc7a0a5549a9f27a24","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ravern/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"384740d0f7faa9ef34ebbee6f48b03356ebe34cb","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ravern/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"dcf8f8e91f1c608046924f610099a029fbaad1c3","isMergeCommit":false,"messageTitle":"Add parsing of clean command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"45e91541d967e1e68cf2536848f4dad08f4a3037","isMergeCommit":false,"messageTitle":"Add hashCode-equals contract for tasks, datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":2}}},{"hash":"c53f67088c9a0df6c4f28e623401a6d63f96f004","isMergeCommit":false,"messageTitle":"Add processing of clean command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"a811e0748a6428221ea676a9ca1f0566dfa08b1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-C-DetectDuplicates","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"01902bf9b6745e31e3332497d1ae20962cc0a6b6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from ravern/branch-C-DetectDuplicates","messageBody":"Add clean command to deduplicate task list","tags":["C-DetectDuplicates"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ravern":{"java":2086,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":0}},"authorContributionVariance":{"ravern":136473.47},"authorDisplayNameMap":{"ravern":"CS2103T-W10-1 KOH ..HONG"}} +{"authorDailyContributionsMap":{"ravern":[{"date":"2023-08-22","commitResults":[{"hash":"ac6eff5f562bb5fef20929f48e8a39596f465d53","isMergeCommit":false,"messageTitle":"Rename chatbot to Ekud","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"712ed9441a90db370e5ad5f87036ef66288b6017","isMergeCommit":false,"messageTitle":"Add echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"fda2240e0300bed7389f105fd37973f6e8b2abcd","isMergeCommit":false,"messageTitle":"Add adding and listing functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":9}}},{"hash":"74da177367379d205f50c2be137244b42b32a6f6","isMergeCommit":false,"messageTitle":"Add (un)marking functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":2}}},{"hash":"022062dd47bb79efcdb9ad2ae8ab5cf773fb24cb","isMergeCommit":false,"messageTitle":"Refactor line processing and split tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":47}}},{"hash":"d48b93da4408f4c9d09849f54ea9e367730cb717","isMergeCommit":false,"messageTitle":"Refactor command parsing and add different task types","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":352,"deletions":96}}}]},{"date":"2023-08-23","commitResults":[{"hash":"6e2e871cfe53b757b81ac7989c61b97669fcdde4","isMergeCommit":false,"messageTitle":"Refactor to improve Store abstraction","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":23}}},{"hash":"30eedde628d74094cbca77a50d43ab3e5362fe32","isMergeCommit":false,"messageTitle":"Refine main file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":18}}},{"hash":"0f3bb833f14fd88541147f42e198e89abe20709b","isMergeCommit":false,"messageTitle":"Update tests to latest","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":3,"deletions":7}}},{"hash":"e4a654c0a6101abc87c2da94bbe2543d1d7d61bc","isMergeCommit":false,"messageTitle":"Improve and simplify error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":17}}},{"hash":"60958d461d3c0facef994773cdbb47498449c1a4","isMergeCommit":false,"messageTitle":"Add delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":42,"deletions":11}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c7fb5a232200f38bdf420b5c1903d5196ec14cc4","isMergeCommit":false,"messageTitle":"Refactor program into state machine","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":596,"deletions":359}}},{"hash":"5fd3cf352ae4878ed3f74437270cf892eb9ee8e2","isMergeCommit":false,"messageTitle":"Add ability to save to a file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":0},"java":{"insertions":59,"deletions":6}}},{"hash":"e9e24ac52d586c5ec8d63e6ef141ebb3ea1b5d27","isMergeCommit":false,"messageTitle":"Fix option slash to be forward not backward","messageBody":"Add ignore for data files\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":17},"java":{"insertions":5,"deletions":4}}},{"hash":"8df90abe25711a88fb762482fca9a843fce1ac34","isMergeCommit":false,"messageTitle":"Add basic DateTime parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":20}}},{"hash":"428337b1f990365c9638d751ef98b8d70def17c0","isMergeCommit":false,"messageTitle":"Add DateTime util to handle parsing and formatting","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":85,"deletions":43}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e693712ac1e15e75d73c1946598959d16c57b767","isMergeCommit":false,"messageTitle":"Refactor with Ui, Storage, TaskList, Parser class","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":528,"deletions":455},"sh":{"insertions":1,"deletions":1}}},{"hash":"eaa10a7a81bda53a3ccf130a01fc161e6b025880","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"92efce4fc2bdde14f56ca2e64487897f772f6805","isMergeCommit":false,"messageTitle":"Modify build.gradle for renamed app","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4}}},{"hash":"eee665f5dffc8e3cbe39060c2fa7319e00c98b05","isMergeCommit":false,"messageTitle":"Add tests for Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"b34cb38a0d52e0b319ae642184a5c6826f072df4","isMergeCommit":false,"messageTitle":"Fix to only write mutating commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"827745eb80257648e9351ffd8387259e5c97dbb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Jar","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4d0355813178a4e01c779f8aff065a6f911e2688","isMergeCommit":false,"messageTitle":"Add DateTime getters and test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":1}}},{"hash":"4d25156f23e777800e57147697061f0b59063587","isMergeCommit":false,"messageTitle":"Add test for Parser","messageBody":"","tags":["A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"0a6da97c66ffdd5c21f7f69c230e1387776f48fb","isMergeCommit":false,"messageTitle":"Add Javadoc for command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":0}}},{"hash":"299134e54e14c183e1eae1609129227f7b3d218a","isMergeCommit":false,"messageTitle":"Add Javadoc for handler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"b68d3e2cd7cb0be996df5287e04bc3879621aaa9","isMergeCommit":false,"messageTitle":"Add Javadoc for state","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":18}}},{"hash":"0a0a02f652a885350cd599d3dde3fff6b239c816","isMergeCommit":false,"messageTitle":"Add Javadoc for remaining classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":0}}},{"hash":"21a76fa6702bb21d423898ec82df1533ae4ec072","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"e0be2b1d6f37c442cd893d0e51f02e88d44db2e6","isMergeCommit":false,"messageTitle":"Update text ui tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"sh":{"insertions":9,"deletions":9}}},{"hash":"cdf8360b53348aa8f4d71abebb364f54dfafca8d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/ekud/state/TaskList.java\n#\tsrc/main/java/ekud/ui/Ui.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"2b1f4c5c324ba251ac013fc51737a3482cc817d2","isMergeCommit":false,"messageTitle":"add basic gui impl","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":240,"deletions":72}}},{"hash":"01a3f3af5e8f60d5700f81857035cc8b79767404","isMergeCommit":false,"messageTitle":"add bot and human images","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":7}}},{"hash":"79162f2d514aac892fc609b95b5ec10959ad6ece","isMergeCommit":false,"messageTitle":"refine bot and human messages","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":35}}},{"hash":"6757efad1db3a973e5b3a0e186eda4d79de4a711","isMergeCommit":false,"messageTitle":"remove text-ui-testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":13},"sh":{"insertions":0,"deletions":34}}}]},{"date":"2023-09-12","commitResults":[{"hash":"694f4fcd003b32f2753e969cc307449dde11d776","isMergeCommit":false,"messageTitle":"Fix gradle build issues for uber jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0}}},{"hash":"bed679cbae56f3929289e7a6734051219e0028f4","isMergeCommit":false,"messageTitle":"Add assertions for non-empty text","messageBody":"Before this commit, asserting that the text given to the parseComponent and parseCommand functions was done by checking for non-emptiness and throwing an IllegalArgumentException. While this was desirable behavior, I believe assertions are better suited for the task.\n\nThis is because this non-empty invariant should be upholded by the programmer who is building Ekud and not the user of the program. Throwing an exception might result in it getting caught by a regular try-catch and eventually being displayed to the user, which is not the purpose of this check.\n\nTherefore, we switch to using assertions here instead of a simple IllegalArgumentException.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":8}}},{"hash":"df1a4ee90438c8f308fc0f844830879050a26797","isMergeCommit":false,"messageTitle":"Remove redundant import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"5ee6e2b086f03c73244c0ac10c040811b11d8903","isMergeCommit":false,"messageTitle":"Fix switch case indentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":49}}},{"hash":"db94acc4fbb39304e912129dee33ec3541ec899e","isMergeCommit":false,"messageTitle":"Rename mark and unmark methods to be more descriptive","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"d2a3d68484d292932554ee7e8a97d5b76957a0b3","isMergeCommit":false,"messageTitle":"Add Javadoc to Task constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"1f38af98281413f2ab4948bc7a0a5549a9f27a24","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ravern/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"384740d0f7faa9ef34ebbee6f48b03356ebe34cb","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ravern/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"dcf8f8e91f1c608046924f610099a029fbaad1c3","isMergeCommit":false,"messageTitle":"Add parsing of clean command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"45e91541d967e1e68cf2536848f4dad08f4a3037","isMergeCommit":false,"messageTitle":"Add hashCode-equals contract for tasks, datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":2}}},{"hash":"c53f67088c9a0df6c4f28e623401a6d63f96f004","isMergeCommit":false,"messageTitle":"Add processing of clean command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"a811e0748a6428221ea676a9ca1f0566dfa08b1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-C-DetectDuplicates","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"01902bf9b6745e31e3332497d1ae20962cc0a6b6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from ravern/branch-C-DetectDuplicates","messageBody":"Add clean command to deduplicate task list","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ravern":{"java":2086,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":0}},"authorContributionVariance":{"ravern":136473.47},"authorDisplayNameMap":{"ravern":"CS2103T-W10-1 KOH ..HONG"}} diff --git a/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index b556f978..84408918 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,66 +1,66 @@ -Sep 18, 2023 1:13:37 AM reposense.system.LogsManager addFileHandler +Sep 18, 2023 4:29:51 AM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Sep 18, 2023 1:13:37 AM reposense.parser.CsvParser validateHeader +Sep 18, 2023 4:29:52 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 18, 2023 1:13:39 AM reposense.parser.CsvParser validateHeader +Sep 18, 2023 4:29:53 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 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jason found. The alias will belong to the last author - jason-raiin -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kurt found. The alias will belong to the last author - Kurtyjlee -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jason found. The alias will belong to the last author - jason-raiin -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kurt found. The alias will belong to the last author - Kurtyjlee -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 18, 2023 1:13:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 18, 2023 4:29:53 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 18, 2023 1:13:39 AM reposense.git.GitConfig getGlobalGitLfsConfig +Sep 18, 2023 4:29:53 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 @@ -76,8647 +76,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 18, 2023 1:13:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/siqirua/ip.git... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/CJ-Lee01/ip.git... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/thaddeusong/ip.git... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/siqirua/ip.git to complete... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/thaddeusong/ip.git to complete... -Sep 18, 2023 1:13:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/CJ-Lee01/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/siqirua/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/thaddeusong/ip.git to complete... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/siqirua/ip.git to complete... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/thaddeusong/ip.git completed! +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanteckfang/ip.git... -Sep 18, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [1/480] Analyzing https://github.com/siqirua/ip.git (master)... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [1/480] Analyzing https://github.com/thaddeusong/ip.git (master)... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanteckfang/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/siqirua/ip.git completed! +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/CJ-Lee01/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/emzm2023/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/thaddeusong/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ph-nathan/ip.git... -Sep 18, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [2/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ph-nathan/ip.git to complete... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/butteredyakiimo/ip.git... -Sep 18, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yuxunn/ip.git... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... +Sep 18, 2023 4:29:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [2/480] Analyzing https://github.com/siqirua/ip.git (master)... +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/butteredyakiimo/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ph-nathan/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yuxunn/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanteckfang/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RB9823/ip.git... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RB9823/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yuxunn/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TyrusLye/ip.git... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TyrusLye/ip.git to complete... -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RB9823/ip.git... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ph-nathan/ip.git completed! -Sep 18, 2023 1:13:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TyrusLye/ip.git... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/butteredyakiimo/ip.git completed! -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RB9823/ip.git to complete... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TyrusLye/ip.git to complete... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cxo05/ip.git... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shyanyong/ip.git... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cxo05/ip.git to complete... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shyanyong/ip.git to complete... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RB9823/ip.git completed! -Sep 18, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/howenc/ip.git... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... -Sep 18, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TyrusLye/ip.git completed! -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/howenc/ip.git... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cxo05/ip.git completed! +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shyanyong/ip.git completed! +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kurtyjlee/ip.git... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kurtyjlee/ip.git to complete... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shyanyong/ip.git completed! -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cxo05/ip.git completed! -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/josepholim/ip.git... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/geoffong11/ip.git... -Sep 18, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! -Sep 18, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [3/480] Analyzing https://github.com/thaddeusong/ip.git (master)... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/josepholim/ip.git to complete... -Sep 18, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... -Sep 18, 2023 1:13:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/geoffong11/ip.git to complete... -Sep 18, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... -Sep 18, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... -Sep 18, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! -Sep 18, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [4/480] Analyzing https://github.com/emzm2023/ip.git (master)... -Sep 18, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/howenc/ip.git completed! -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jianrong7/ip.git... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jianrong7/ip.git to complete... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kurtyjlee/ip.git completed! -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/josepholim/ip.git completed! +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/A1WAYSD/ip.git... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/geoffong11/ip.git completed! -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/NgChunMan/ip.git... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/josepholim/ip.git completed! -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/NgChunMan/ip.git to complete... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/geoffong11/ip.git completed! +Sep 18, 2023 4:29:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/limjunxian1/ip.git... -Sep 18, 2023 1:13:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/NgChunMan/ip.git to complete... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limjunxian1/ip.git to complete... -Sep 18, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:29:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [5/480] Analyzing https://github.com/tanteckfang/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jianrong7/ip.git completed! -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jack1e0/ip.git... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [3/480] Analyzing https://github.com/emzm2023/ip.git (master)... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jack1e0/ip.git to complete... -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [6/480] Analyzing https://github.com/yuxunn/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/NgChunMan/ip.git completed! -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dishenggg/ip.git... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dishenggg/ip.git to complete... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dishenggg/ip.git... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/limjunxian1/ip.git completed! -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dishenggg/ip.git to complete... +Sep 18, 2023 4:29:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zhyuhan/ip.git... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhyuhan/ip.git to complete... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... +Sep 18, 2023 4:29:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! +Sep 18, 2023 4:29:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [4/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jack1e0/ip.git completed! -Sep 18, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yuxunn/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Dioclei/ip.git... -Sep 18, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yuxunn/ip.git (master)... -Sep 18, 2023 1:13:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yuxunn/ip.git (master) completed! -Sep 18, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [7/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/hjoneweek/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhyuhan/ip.git completed! +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Daphne789/ip.git... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dishenggg/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Daphne789/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WinstonLeonard/ip.git... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Daphne789/ip.git to complete... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WinstonLeonard/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhyuhan/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/peiran18/ip.git... -Sep 18, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/peiran18/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 18, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! -Sep 18, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [8/480] Analyzing https://github.com/ph-nathan/ip.git (master)... -Sep 18, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Dioclei/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AriellaCallista/ip.git... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AriellaCallista/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Daphne789/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/migfoo02/ip.git... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Jonyxzx/ip.git... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jonyxzx/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/peiran18/ip.git completed! -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jonyxzx/ip.git to complete... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SynapseProgramming/ip.git... -Sep 18, 2023 1:13:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SynapseProgramming/ip.git to complete... -Sep 18, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [9/480] Analyzing https://github.com/RB9823/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [10/480] Analyzing https://github.com/TyrusLye/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [11/480] Analyzing https://github.com/shyanyong/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AriellaCallista/ip.git completed! -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... +Sep 18, 2023 4:29:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Darren159/ip.git... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [5/480] Analyzing https://github.com/yuxunn/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Darren159/ip.git to complete... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/migfoo02/ip.git completed! -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/imkwokyong/ip.git... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joeng03/ip.git... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/imkwokyong/ip.git to complete... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vijay-shankaranand/ip.git... -Sep 18, 2023 1:13:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vijay-shankaranand/ip.git to complete... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [12/480] Analyzing https://github.com/cxo05/ip.git (master)... -Sep 18, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [6/480] Analyzing https://github.com/tanteckfang/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Darren159/ip.git completed! -Sep 18, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SelwynAng/ip.git... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SelwynAng/ip.git to complete... -Sep 18, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! -Sep 18, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [13/480] Analyzing https://github.com/howenc/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/vijay-shankaranand/ip.git completed! -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/joeng03/ip.git completed! -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/imkwokyong/ip.git completed! -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tanyyyming/ip.git... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jeffrey-jian/ip.git to complete... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JCSnap/ip.git... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/vijay-shankaranand/ip.git completed! +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tanyyyming/ip.git... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JCSnap/ip.git... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JCSnap/ip.git to complete... -Sep 18, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! -Sep 18, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [14/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kurtyjlee/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kurtyjlee/ip.git (master)... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yuxunn/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SelwynAng/ip.git completed! -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AprupKale/ip.git... -Sep 18, 2023 1:13:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yuxunn/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AprupKale/ip.git to complete... -Sep 18, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yuxunn/ip.git (master) completed! +Sep 18, 2023 4:29:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [7/480] Analyzing https://github.com/ph-nathan/ip.git (master)... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jeffrey-jian/ip.git completed! +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/woojiahao/ip.git... +Sep 18, 2023 4:29:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/woojiahao/ip.git to complete... +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanyyyming/ip.git completed! -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/JCSnap/ip.git completed! -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/woojiahao/ip.git... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jeffrey-jian/ip.git completed! -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... -Sep 18, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/syamfarh/ip.git... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/woojiahao/ip.git to complete... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/syamfarh/ip.git to complete... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PetrichorPrecipice/ip.git to complete... -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/howenc/ip.git (master) completed! -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [15/480] Analyzing https://github.com/geoffong11/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/syamfarh/ip.git to complete... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AprupKale/ip.git completed! -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/D-Limiter/ip.git... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/D-Limiter/ip.git to complete... -Sep 18, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [16/480] Analyzing https://github.com/josepholim/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... -Sep 18, 2023 1:13:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/woojiahao/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanteckfang/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/coderhuang559/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/PetrichorPrecipice/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LINCHENYU2030S/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/coderhuang559/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LINCHENYU2030S/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LINCHENYU2030S/ip.git... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/syamfarh/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LINCHENYU2030S/ip.git to complete... +Sep 18, 2023 4:29:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanteckfang/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pra-navi/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pra-navi/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [8/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/D-Limiter/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/phiphi-tan/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/phiphi-tan/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! -Sep 18, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [18/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/josepholim/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/josepholim/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/josepholim/ip.git (master) completed! -Sep 18, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [19/480] Analyzing https://github.com/NgChunMan/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [9/480] Analyzing https://github.com/RB9823/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LINCHENYU2030S/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/coderhuang559/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ktzy0305/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pra-navi/ip.git completed! +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LordSaumya/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ktzy0305/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pra-navi/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/coderhuang559/ip.git completed! +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LordSaumya/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Chen1x/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chen1x/ip.git to complete... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/phiphi-tan/ip.git completed! -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Chen1x/ip.git... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yanghengtang/ip.git... -Sep 18, 2023 1:13:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chen1x/ip.git to complete... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yanghengtang/ip.git to complete... -Sep 18, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/A1WAYSD/ip.git (master) completed! -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ktzy0305/ip.git completed! -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/johnnythesnake12/ip.git... -Sep 18, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/johnnythesnake12/ip.git to complete... -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LordSaumya/ip.git completed! -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chen1x/ip.git completed! -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! +Sep 18, 2023 4:29:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [10/480] Analyzing https://github.com/TyrusLye/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/oeggy03/ip.git... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/p-xp/ip.git... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/oeggy03/ip.git to complete... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chen1x/ip.git completed! +Sep 18, 2023 4:29:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/p-xp/ip.git... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/p-xp/ip.git to complete... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yanghengtang/ip.git completed! -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/matochichap/ip.git... -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/p-xp/ip.git to complete... -Sep 18, 2023 1:13:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/matochichap/ip.git to complete... -Sep 18, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [22/480] Analyzing https://github.com/hjoneweek/ip.git (master)... -Sep 18, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [23/480] Analyzing https://github.com/dishenggg/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/oeggy03/ip.git completed! -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/johnnythesnake12/ip.git completed! -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/applepiofmyeye/ip.git... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/applepiofmyeye/ip.git to complete... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! +Sep 18, 2023 4:29:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [11/480] Analyzing https://github.com/shyanyong/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/oeggy03/ip.git completed! +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TiwKangXu/ip.git... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/matochichap/ip.git completed! -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:29:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/p-xp/ip.git completed! -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ScarletBlanks/ip.git... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chiayunrong/ip.git... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/matochichap/ip.git completed! +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chiayunrong/ip.git... +Sep 18, 2023 4:29:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chiayunrong/ip.git to complete... -Sep 18, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [24/480] Analyzing https://github.com/zhyuhan/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TiwKangXu/ip.git completed! -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! -Sep 18, 2023 1:13:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:29:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... +Sep 18, 2023 4:29:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/applepiofmyeye/ip.git completed! +Sep 18, 2023 4:30:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! +Sep 18, 2023 4:30:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [12/480] Analyzing https://github.com/cxo05/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... -Sep 18, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [25/480] Analyzing https://github.com/Dioclei/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TiwKangXu/ip.git completed! +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chiayunrong/ip.git completed! -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jx124/ip.git... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/applepiofmyeye/ip.git completed! -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chiayunrong/ip.git completed! +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Clin-lyx/ip.git... -Sep 18, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jx124/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AryanG01/ip.git... -Sep 18, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [26/480] Analyzing https://github.com/Daphne789/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AryanG01/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [27/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AryanG01/ip.git completed! -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/devanshubisht/ip.git completed! -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kayabuttertoastt/ip.git... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sheryew/ip.git... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jx124/ip.git completed! -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sheryew/ip.git... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AryanG01/ip.git completed! +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sheryew/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jonasongg/ip.git... -Sep 18, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [28/480] Analyzing https://github.com/peiran18/ip.git (master)... -Sep 18, 2023 1:13:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jonasongg/ip.git to complete... -Sep 18, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Clin-lyx/ip.git completed! -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yiwen101/ip.git... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yiwen101/ip.git to complete... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [29/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [30/480] Analyzing https://github.com/migfoo02/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sheryew/ip.git completed! -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! +Sep 18, 2023 4:30:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [13/480] Analyzing https://github.com/howenc/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tiongMax/ip.git... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tiongMax/ip.git to complete... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sheryew/ip.git completed! +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jonasongg/ip.git completed! -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chuababyy/ip.git... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/supermii2/ip.git... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/supermii2/ip.git to complete... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yiwen101/ip.git completed! -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/remuslum/ip.git... -Sep 18, 2023 1:13:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/remuslum/ip.git to complete... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! -Sep 18, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [31/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... -Sep 18, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [32/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tiongMax/ip.git completed! -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kanna-1/ip.git... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kanna-1/ip.git to complete... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! +Sep 18, 2023 4:30:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [14/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kurtyjlee/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kurtyjlee/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chuababyy/ip.git completed! -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicolengk/ip.git... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicolengk/ip.git to complete... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/remuslum/ip.git completed! -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/supermii2/ip.git completed! -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/newway1814/ip.git... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/newway1814/ip.git to complete... -Sep 18, 2023 1:13:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/remuslum/ip.git completed! +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/glenngnng/ip.git to complete... -Sep 18, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [33/480] Analyzing https://github.com/Darren159/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [34/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... -Sep 18, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/howenc/ip.git (master) completed! +Sep 18, 2023 4:30:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [15/480] Analyzing https://github.com/josepholim/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicolengk/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zsh-eng/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/glenngnng/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/newway1814/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mingyuanc/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mingyuanc/ip.git to complete... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/glenngnng/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LamJiuFong/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LamJiuFong/ip.git to complete... -Sep 18, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! -Sep 18, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [35/480] Analyzing https://github.com/joeng03/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kanna-1/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zsh-eng/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [16/480] Analyzing https://github.com/geoffong11/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GlendaChong/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... -Sep 18, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! -Sep 18, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [36/480] Analyzing https://github.com/imkwokyong/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zsh-eng/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyuanc/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/starrylight99/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/starrylight99/ip.git to complete... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyuanc/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AustinHuang1203/ip.git to complete... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seewhyjay/ip.git... -Sep 18, 2023 1:13:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seewhyjay/ip.git to complete... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [37/480] Analyzing https://github.com/SelwynAng/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GlendaChong/ip.git completed! -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/josepholim/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/josepholim/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/josepholim/ip.git (master) completed! +Sep 18, 2023 4:30:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seewhyjay/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GlendaChong/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [38/480] Analyzing https://github.com/tanyyyming/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/starrylight99/ip.git completed! -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/limzhenwy/ip.git... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/starrylight99/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limzhenwy/ip.git to complete... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AustinHuang1203/ip.git completed! -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xCOLOURx/ip.git... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seewhyjay/ip.git completed! -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AustinHuang1203/ip.git completed! +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zacwong2151/ip.git... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zacwong2151/ip.git to complete... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! +Sep 18, 2023 4:30:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [18/480] Analyzing https://github.com/NgChunMan/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruth-lim/ip.git completed! -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Zjinnnn/ip.git... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [39/480] Analyzing https://github.com/JCSnap/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 18, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [40/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zacwong2151/ip.git completed! +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/awhb/ip.git... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/awhb/ip.git to complete... -Sep 18, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/limzhenwy/ip.git completed! -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teoks0199/ip.git... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/limzhenwy/ip.git completed! +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/teoks0199/ip.git to complete... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zacwong2151/ip.git completed! -Sep 18, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/qz1004/ip.git... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! +Sep 18, 2023 4:30:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [19/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/qz1004/ip.git to complete... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Zjinnnn/ip.git completed! -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pangyyen/ip.git... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pangyyen/ip.git to complete... -Sep 18, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [42/480] Analyzing https://github.com/woojiahao/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/awhb/ip.git completed! -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [43/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teoks0199/ip.git completed! +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Mahidharah/ip.git... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/awhb/ip.git completed! +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jason-raiin/ip.git... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Mahidharah/ip.git to complete... -Sep 18, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teoks0199/ip.git completed! -Sep 18, 2023 1:13:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/qz1004/ip.git completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jason-raiin/ip.git... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ravern/ip.git... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ravern/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/pangyyen/ip.git completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bobscodedump/ip.git... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bobscodedump/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Mahidharah/ip.git completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nixonwidjaja/ip.git... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nixonwidjaja/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ravern/ip.git completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... -Sep 18, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jason-raiin/ip.git completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ravern/ip.git completed! +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/techjay-c/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryanozx/ip.git... -Sep 18, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryanozx/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [44/480] Analyzing https://github.com/syamfarh/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/A1WAYSD/ip.git (master) completed! +Sep 18, 2023 4:30:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/bobscodedump/ip.git completed! -Sep 18, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LuahJunYang/ip.git... -Sep 18, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... -Sep 18, 2023 1:13:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LuahJunYang/ip.git to complete... -Sep 18, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! +Sep 18, 2023 4:30:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryanozx/ip.git completed! +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HEEaZ/ip.git... -Sep 18, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryanozx/ip.git completed! -Sep 18, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HEEaZ/ip.git to complete... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/techjay-c/ip.git completed! -Sep 18, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dom-buri/ip.git... -Sep 18, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [46/480] Analyzing https://github.com/coderhuang559/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlainS87/ip.git... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dom-buri/ip.git to complete... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/techjay-c/ip.git completed! +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlainS87/ip.git... +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlainS87/ip.git to complete... -Sep 18, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! -Sep 18, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [47/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/HEEaZ/ip.git completed! +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tiongjjyi/ip.git... -Sep 18, 2023 1:13:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... -Sep 18, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! -Sep 18, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! -Sep 18, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [48/480] Analyzing https://github.com/pra-navi/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/HEEaZ/ip.git completed! -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Vanessamae23/ip.git... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Vanessamae23/ip.git to complete... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dom-buri/ip.git completed! -Sep 18, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/fuyiqiao/ip.git... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/fuyiqiao/ip.git to complete... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! +Sep 18, 2023 4:30:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [22/480] Analyzing https://github.com/zhyuhan/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tiongjjyi/ip.git completed! -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/spatuly/ip.git... -Sep 18, 2023 1:13:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/spatuly/ip.git to complete... -Sep 18, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Vanessamae23/ip.git completed! -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/fuyiqiao/ip.git completed! -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanshiyu1999/ip.git... -Sep 18, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kb-Tay/ip.git... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kb-Tay/ip.git to complete... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! +Sep 18, 2023 4:30:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [23/480] Analyzing https://github.com/hjoneweek/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/spatuly/ip.git completed! -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/beatricecst/ip.git... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/beatricecst/ip.git to complete... -Sep 18, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [51/480] Analyzing https://github.com/Chen1x/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanshiyu1999/ip.git completed! -Sep 18, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanveersingh10/ip.git... -Sep 18, 2023 1:14:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanveersingh10/ip.git to complete... -Sep 18, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! -Sep 18, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [52/480] Analyzing https://github.com/LordSaumya/ip.git (master)... -Sep 18, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/beatricecst/ip.git completed! -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kb-Tay/ip.git completed! -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/thienmy0/ip.git... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/thienmy0/ip.git to complete... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/beatricecst/ip.git completed! +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s0ngyang/ip.git... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s0ngyang/ip.git to complete... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ldinghan/ip.git... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/thienmy0/ip.git completed! -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ldinghan/ip.git to complete... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/s0ngyang/ip.git completed! -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/feifeiraindrops/ip.git... -Sep 18, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ryanongwx/ip.git... -Sep 18, 2023 1:14:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/feifeiraindrops/ip.git to complete... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/s0ngyang/ip.git completed! +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ryanongwx/ip.git... +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryanongwx/ip.git to complete... -Sep 18, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! -Sep 18, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! -Sep 18, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [54/480] Analyzing https://github.com/oeggy03/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlainS87/ip.git completed! -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 18, 2023 4:30:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! +Sep 18, 2023 4:30:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [24/480] Analyzing https://github.com/dishenggg/ip.git (master)... +Sep 18, 2023 4:30:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ldinghan/ip.git completed! -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kwangthiag/ip.git... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 18, 2023 4:30:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kwangthiag/ip.git to complete... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 18, 2023 4:30:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! +Sep 18, 2023 4:30:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [25/480] Analyzing https://github.com/Dioclei/ip.git (master)... +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/elhy1999/ip.git... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ryanongwx/ip.git completed! -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/songgthu/ip.git... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/songgthu/ip.git to complete... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kwangthiag/ip.git completed! +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GohTengFong/ip.git... -Sep 18, 2023 1:14:02 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/GohTengFong/ip.git to complete... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [55/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [56/480] Analyzing https://github.com/matochichap/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GohTengFong/ip.git completed! -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elhy1999/ip.git completed! +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/simbayippy/ip.git... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/simbayippy/ip.git to complete... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/songgthu/ip.git completed! -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elhy1999/ip.git completed! -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kwangthiag/ip.git completed! -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Khaleelur-Rahman/ip.git... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Khaleelur-Rahman/ip.git to complete... +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GohTengFong/ip.git completed! +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/proto-aiken-13/ip.git... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/simbayippy/ip.git completed! +Sep 18, 2023 4:30:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/proto-aiken-13/ip.git to complete... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bwangpj/ip.git... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bwangpj/ip.git to complete... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/proto-aiken-13/ip.git to complete... -Sep 18, 2023 1:14:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Khaleelur-Rahman/ip.git to complete... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [57/480] Analyzing https://github.com/p-xp/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [58/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... -Sep 18, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/simbayippy/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Khaleelur-Rahman/ip.git completed! +Sep 18, 2023 4:30:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/weeweh/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [26/480] Analyzing https://github.com/Daphne789/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/weeweh/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Khaleelur-Rahman/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! +Sep 18, 2023 4:30:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [27/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/bwangpj/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s-peiran/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jylow/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s-peiran/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlainS87/ip.git completed! +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jylow/ip.git... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/proto-aiken-13/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lawruixi/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lawruixi/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! -Sep 18, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [59/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! -Sep 18, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [60/480] Analyzing https://github.com/chiayunrong/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/weeweh/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JeremyYong128/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jylow/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JeremyYong128/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/s-peiran/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/brandon-nam/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brandon-nam/ip.git to complete... +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jylow/ip.git completed! +Sep 18, 2023 4:30:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LHeng1/ip.git... -Sep 18, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lawruixi/ip.git completed! -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brandon-nam/ip.git to complete... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Leb14/ip.git... -Sep 18, 2023 1:14:04 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Leb14/ip.git to complete... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [61/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [62/480] Analyzing https://github.com/devanshubisht/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LHeng1/ip.git completed! -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/B-enguin/ip.git... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Leb14/ip.git completed! -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/B-enguin/ip.git to complete... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! +Sep 18, 2023 4:30:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [28/480] Analyzing https://github.com/peiran18/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/brandon-nam/ip.git completed! -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... +Sep 18, 2023 4:30:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s-kybound/ip.git to complete... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [29/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LHeng1/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wesho1107/ip.git... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wesho1107/ip.git to complete... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/B-enguin/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yihfei/ip.git... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Leb14/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yihfei/ip.git to complete... -Sep 18, 2023 1:14:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wesho1107/ip.git to complete... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [63/480] Analyzing https://github.com/AryanG01/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 18, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [64/480] Analyzing https://github.com/jx124/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/s-kybound/ip.git completed! -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wesho1107/ip.git completed! -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/B-enguin/ip.git completed! -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yihfei/ip.git completed! -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dlathyun/ip.git... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wesho1107/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ricketytoc/ip.git... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yihfei/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... -Sep 18, 2023 1:14:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... -Sep 18, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [65/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jx124/ip.git (master) completed! -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [66/480] Analyzing https://github.com/sheryew/ip.git (master)... -Sep 18, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Angelyxx/ip.git completed! -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ricketytoc/ip.git completed! -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AaronJT1/ip.git completed! +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dlathyun/ip.git completed! -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jingting1412/ip.git... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SinhaVedant/ip.git... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AaronJT1/ip.git completed! -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ricketytoc/ip.git completed! +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/freddychenyouren2/ip.git... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/freddychenyouren2/ip.git to complete... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! +Sep 18, 2023 4:30:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [30/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Angelyxx/ip.git completed! +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jordankanghm/ip.git... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jordankanghm/ip.git to complete... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [67/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [68/480] Analyzing https://github.com/jonasongg/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [69/480] Analyzing https://github.com/yiwen101/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [70/480] Analyzing https://github.com/tiongMax/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/adhigop13/ip.git... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingting1412/ip.git completed! +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/adhigop13/ip.git to complete... -Sep 18, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jordankanghm/ip.git completed! -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/waseemingly/ip.git... -Sep 18, 2023 1:14:07 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/waseemingly/ip.git to complete... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingting1412/ip.git completed! -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! +Sep 18, 2023 4:30:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [31/480] Analyzing https://github.com/migfoo02/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jordankanghm/ip.git completed! +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/raydenlim/ip.git... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/raydenlim/ip.git to complete... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/adhigop13/ip.git completed! +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/adhigop13/ip.git completed! -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/FerdiHS/ip.git... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/FerdiHS/ip.git to complete... -Sep 18, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! -Sep 18, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingyu987/ip.git completed! +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/raydenlim/ip.git completed! -Sep 18, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! -Sep 18, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jrchoo/ip.git... -Sep 18, 2023 1:14:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... -Sep 18, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... -Sep 18, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingyu987/ip.git completed! -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RiyaMehta2211/ip.git... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RiyaMehta2211/ip.git to complete... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/FerdiHS/ip.git completed! -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/leezhanpeng/ip.git... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/leezhanpeng/ip.git to complete... -Sep 18, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [32/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! +Sep 18, 2023 4:30:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [33/480] Analyzing https://github.com/Darren159/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jrchoo/ip.git completed! -Sep 18, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/juzzztinsoong/ip.git... -Sep 18, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... -Sep 18, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! -Sep 18, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [74/480] Analyzing https://github.com/nicolengk/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/darrentfy/ip.git... -Sep 18, 2023 1:14:09 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... +Sep 18, 2023 4:30:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/darrentfy/ip.git to complete... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/leezhanpeng/ip.git completed! -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/redtailedfox/ip.git... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Fallman2/ip.git... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Fallman2/ip.git to complete... -Sep 18, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! -Sep 18, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [75/480] Analyzing https://github.com/glenngnng/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/darrentfy/ip.git completed! -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Heran9/ip.git... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... -Sep 18, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! -Sep 18, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [76/480] Analyzing https://github.com/newway1814/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/redtailedfox/ip.git completed! -Sep 18, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/VN-Hao/ip.git... -Sep 18, 2023 1:14:10 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/VN-Hao/ip.git to complete... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! +Sep 18, 2023 4:30:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [34/480] Analyzing https://github.com/joeng03/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Fallman2/ip.git completed! -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Heran9/ip.git completed! -Sep 18, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/H1410101/ip.git... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/VN-Hao/ip.git completed! +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... -Sep 18, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! -Sep 18, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [77/480] Analyzing https://github.com/kanna-1/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/waseemingly/ip.git completed! -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kimshitong/ip.git... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kimshitong/ip.git to complete... -Sep 18, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/VN-Hao/ip.git completed! -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! +Sep 18, 2023 4:30:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [35/480] Analyzing https://github.com/imkwokyong/ip.git (master)... +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingjie88/ip.git completed! +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ivanleekk/ip.git... -Sep 18, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ivanleekk/ip.git to complete... -Sep 18, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [78/480] Analyzing https://github.com/zsh-eng/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingjie88/ip.git completed! -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... -Sep 18, 2023 1:14:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kimshitong/ip.git completed! +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/H1410101/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tayruxin/ip.git... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tayruxin/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kimshitong/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... +Sep 18, 2023 4:30:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... +Sep 18, 2023 4:30:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... +Sep 18, 2023 4:30:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! +Sep 18, 2023 4:30:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [36/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivanleekk/ip.git completed! +Sep 18, 2023 4:30:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/raynertjx/ip.git... -Sep 18, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! -Sep 18, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [79/480] Analyzing https://github.com/mingyuanc/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivanleekk/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lamchenghou/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tayruxin/ip.git completed! +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! -Sep 18, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [80/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tayruxin/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/waseemingly/ip.git completed! +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Carlintyj/ip.git... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/raynertjx/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wxwern/ip.git... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zhengyup/ip.git completed! -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... -Sep 18, 2023 1:14:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/larrywang0701/ip.git completed! -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... +Sep 18, 2023 4:30:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aslam341/ip.git... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... +Sep 18, 2023 4:30:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [37/480] Analyzing https://github.com/SelwynAng/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aslam341/ip.git to complete... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [81/480] Analyzing https://github.com/GlendaChong/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [82/480] Analyzing https://github.com/starrylight99/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Carlintyj/ip.git completed! -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LWZ19/ip.git to complete... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! +Sep 18, 2023 4:30:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [38/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wxwern/ip.git completed! -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/timleow/ip.git... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nubnubyas/ip.git completed! -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/rayshawntan/ip.git... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LWZ19/ip.git completed! +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/rayshawntan/ip.git to complete... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aslam341/ip.git completed! -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aexolate/ip.git... -Sep 18, 2023 1:14:13 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aslam341/ip.git completed! +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aexolate/ip.git to complete... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [83/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [84/480] Analyzing https://github.com/seewhyjay/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... -Sep 18, 2023 1:14:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LWZ19/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Sheeepen/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Sheeepen/ip.git to complete... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/timleow/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/rayshawntan/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aexolate/ip.git completed! +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aexolate/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/iyioon/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/iyioon/ip.git to complete... -Sep 18, 2023 1:14:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! -Sep 18, 2023 1:14:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [85/480] Analyzing https://github.com/ruth-lim/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! -Sep 18, 2023 1:14:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [86/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Sheeepen/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kiwibang/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kiwibang/ip.git to complete... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shuyangk/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncmathan/ip.git completed! +Sep 18, 2023 4:30:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mingyu-wan/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mingyu-wan/ip.git to complete... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncmathan/ip.git completed! -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shuyangk/ip.git completed! +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [39/480] Analyzing https://github.com/JCSnap/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... -Sep 18, 2023 1:14:14 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [40/480] Analyzing https://github.com/tanyyyming/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/iyioon/ip.git completed! -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/asdfghjkxd/ip.git... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... -Sep 18, 2023 1:14:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [87/480] Analyzing https://github.com/limzhenwy/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [88/480] Analyzing https://github.com/zacwong2151/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kiwibang/ip.git completed! -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sushiyade/ip.git... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sushiyade/ip.git to complete... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LuoZYi/ip.git completed! -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Nid21cs/ip.git... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Nid21cs/ip.git to complete... -Sep 18, 2023 1:14:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sushiyade/ip.git completed! +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... -Sep 18, 2023 1:14:15 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/McNaBry/ip.git to complete... -Sep 18, 2023 1:14:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [89/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... -Sep 18, 2023 1:14:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [90/480] Analyzing https://github.com/awhb/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sushiyade/ip.git completed! -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/miljyy/ip.git... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nid21cs/ip.git completed! -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/miljyy/ip.git to complete... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! +Sep 18, 2023 4:30:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nid21cs/ip.git completed! +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ncduy0303/ip.git... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ncduy0303/ip.git to complete... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/McNaBry/ip.git completed! -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/eyelessrhyme7/ip.git... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/miljyy/ip.git completed! +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/eyelessrhyme7/ip.git to complete... -Sep 18, 2023 1:14:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [91/480] Analyzing https://github.com/qz1004/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... -Sep 18, 2023 1:14:16 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/awhb/ip.git (master) completed! -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [92/480] Analyzing https://github.com/teoks0199/ip.git (master)... -Sep 18, 2023 1:14:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/miljyy/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncduy0303/ip.git completed! +Sep 18, 2023 4:30:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/m1oojv/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [42/480] Analyzing https://github.com/woojiahao/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/m1oojv/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncduy0303/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Nixx162/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Nixx162/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [93/480] Analyzing https://github.com/pangyyen/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [94/480] Analyzing https://github.com/Mahidharah/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruishanteo/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mfjkri/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mfjkri/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [43/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/m1oojv/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/junhonglow/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/junhonglow/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Nixx162/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/junhonglow/ip.git to complete... +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RoeReRe/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RoeReRe/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Gabriel4357/ip.git completed! -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [95/480] Analyzing https://github.com/ravern/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Badatprogrammiing/ip.git... -Sep 18, 2023 1:14:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Badatprogrammiing/ip.git to complete... -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! -Sep 18, 2023 1:14:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [96/480] Analyzing https://github.com/jason-raiin/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/mfjkri/ip.git completed! -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Badatprogrammiing/ip.git... +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nknguyenhc/ip.git... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Badatprogrammiing/ip.git to complete... +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nknguyenhc/ip.git to complete... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/junhonglow/ip.git completed! -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/winson8222/ip.git... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RoeReRe/ip.git completed! -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/winson8222/ip.git to complete... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RoeReRe/ip.git completed! +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wujy28/ip.git... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wujy28/ip.git to complete... -Sep 18, 2023 1:14:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! -Sep 18, 2023 1:14:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SimWPEric/ip.git... -Sep 18, 2023 1:14:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ravern/ip.git (master) completed! -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SimWPEric/ip.git to complete... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [97/480] Analyzing https://github.com/bobscodedump/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [98/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nknguyenhc/ip.git completed! -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HugeNoob/ip.git... -Sep 18, 2023 1:14:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HugeNoob/ip.git to complete... -Sep 18, 2023 1:14:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! -Sep 18, 2023 1:14:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [99/480] Analyzing https://github.com/ryanozx/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/winson8222/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lerxuann/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lerxuann/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wujy28/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SimWPEric/ip.git completed! +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Weiennn/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wujy28/ip.git completed! +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Weiennn/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SimWPEric/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... +Sep 18, 2023 4:30:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! +Sep 18, 2023 4:30:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [44/480] Analyzing https://github.com/syamfarh/ip.git (master)... +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/maj0-0/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/maj0-0/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [100/480] Analyzing https://github.com/techjay-c/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... +Sep 18, 2023 4:30:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/HugeNoob/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lerxuann/ip.git completed! +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/qyaner/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/qyaner/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [101/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lerxuann/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ruiyangzh/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ruiyangzh/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! +Sep 18, 2023 4:30:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/maj0-0/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bombbird2001/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Weiennn/ip.git completed! -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bombbird2001/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Weiennn/ip.git completed! +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/hyc17003/ip.git... -Sep 18, 2023 1:14:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/hyc17003/ip.git to complete... -Sep 18, 2023 1:14:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/qyaner/ip.git completed! -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/adammangzijun/ip.git... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/adammangzijun/ip.git to complete... -Sep 18, 2023 1:14:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [102/480] Analyzing https://github.com/HEEaZ/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruiyangzh/ip.git completed! -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andytoh1/ip.git... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andytoh1/ip.git to complete... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hyc17003/ip.git completed! -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Bombbird2001/ip.git completed! -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Originalidk/ip.git... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/quzhetao01/ip.git... -Sep 18, 2023 1:14:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Originalidk/ip.git to complete... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hyc17003/ip.git completed! +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/quzhetao01/ip.git... +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/quzhetao01/ip.git to complete... -Sep 18, 2023 1:14:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [103/480] Analyzing https://github.com/dom-buri/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/adammangzijun/ip.git completed! -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/InfiBeyond/ip.git... -Sep 18, 2023 1:14:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/InfiBeyond/ip.git to complete... -Sep 18, 2023 1:14:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [104/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... -Sep 18, 2023 1:14:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/andytoh1/ip.git completed! -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! +Sep 18, 2023 4:30:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [46/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bearypop/ip.git... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bearypop/ip.git to complete... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... +Sep 18, 2023 4:30:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Originalidk/ip.git completed! -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/quzhetao01/ip.git completed! -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [47/480] Analyzing https://github.com/pra-navi/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sp4ce-cowboy/ip.git... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/quzhetao01/ip.git completed! +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JasonLCY-Temp/ip.git... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/InfiBeyond/ip.git completed! -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/InfiBeyond/ip.git completed! +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wjayee/ip.git... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wjayee/ip.git to complete... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [108/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Bearypop/ip.git completed! -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vivienherq/ip.git... -Sep 18, 2023 1:14:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vivienherq/ip.git to complete... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jamesebond/ip.git... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wjayee/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jamesebond/ip.git to complete... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wjayee/ip.git completed! +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/victorlaiyeeteng/ip.git to complete... -Sep 18, 2023 1:14:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! -Sep 18, 2023 1:14:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [109/480] Analyzing https://github.com/beatricecst/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! -Sep 18, 2023 1:14:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [110/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/vivienherq/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lyuanww/ip.git... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lyuanww/ip.git to complete... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [48/480] Analyzing https://github.com/coderhuang559/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jonyeokj/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yongning0310/ip.git... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cloud7050/ip.git... -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jamesebond/ip.git completed! -Sep 18, 2023 1:14:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cloud7050/ip.git... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Cloud7050/ip.git to complete... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LoMaply/ip.git... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LoMaply/ip.git to complete... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/beatricecst/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/beatricecst/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/beatricecst/ip.git (master) completed! -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [111/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [112/480] Analyzing https://github.com/thienmy0/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/thienmy0/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/thienmy0/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! +Sep 18, 2023 4:30:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lyuanww/ip.git completed! -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tllshan/ip.git... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yongning0310/ip.git completed! -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cloud7050/ip.git completed! -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tllshan/ip.git to complete... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yongning0310/ip.git completed! +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Gavino3o/ip.git... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cloud7050/ip.git completed! +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HollaG/ip.git... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Gavino3o/ip.git to complete... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LoMaply/ip.git completed! -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HollaG/ip.git to complete... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LoMaply/ip.git completed! +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cheeggered/ip.git... -Sep 18, 2023 1:14:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cheeggered/ip.git to complete... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/thienmy0/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [113/480] Analyzing https://github.com/s0ngyang/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/thienmy0/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/thienmy0/ip.git (master) completed! -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [114/480] Analyzing https://github.com/ldinghan/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... -Sep 18, 2023 1:14:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! -Sep 18, 2023 1:14:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [115/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tllshan/ip.git completed! -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xenosf/ip.git... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Gavino3o/ip.git completed! -Sep 18, 2023 1:14:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xenosf/ip.git to complete... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Gavino3o/ip.git completed! +Sep 18, 2023 4:30:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TehOPanas/ip.git... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/HollaG/ip.git completed! -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/neyapraveen/ip.git... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cheeggered/ip.git completed! -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/neyapraveen/ip.git to complete... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cheeggered/ip.git completed! +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/richiehx/ip.git... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/richiehx/ip.git to complete... -Sep 18, 2023 1:14:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ldinghan/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ldinghan/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ldinghan/ip.git (master) completed! -Sep 18, 2023 1:14:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [116/480] Analyzing https://github.com/AlainS87/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 18, 2023 1:14:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [51/480] Analyzing https://github.com/LordSaumya/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/xenosf/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/neyapraveen/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlyssaPng/ip.git... -Sep 18, 2023 1:14:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlyssaPng/ip.git to complete... +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TehOPanas/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/neyapraveen/ip.git completed! +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/leezhengjing/ip.git... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlyssaPng/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/leezhengjing/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seantehds/ip.git... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [117/480] Analyzing https://github.com/ryanongwx/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/richiehx/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seantehds/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ceilingFan456/ip.git... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ceilingFan456/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryanongwx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryanongwx/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [118/480] Analyzing https://github.com/GohTengFong/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lihongguang00/ip.git... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Singa-pirate/ip.git... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lihongguang00/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/leezhengjing/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [119/480] Analyzing https://github.com/songgthu/ip.git (master)... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... -Sep 18, 2023 1:14:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Singa-pirate/ip.git... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/seantehds/ip.git completed! -Sep 18, 2023 1:14:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vansh284/ip.git... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vansh284/ip.git to complete... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Singa-pirate/ip.git completed! -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songfangyl/ip.git completed! -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/YeoBohShin/ip.git... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lihongguang00/ip.git completed! +Sep 18, 2023 4:30:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... +Sep 18, 2023 4:30:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shuenj/ip.git... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/vansh284/ip.git completed! -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [52/480] Analyzing https://github.com/Chen1x/ip.git (master)... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songfangyl/ip.git completed! +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shuenj/ip.git to complete... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lunaroddity/ip.git... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... -Sep 18, 2023 1:14:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lihongguang00/ip.git completed! -Sep 18, 2023 1:14:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! -Sep 18, 2023 1:14:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [120/480] Analyzing https://github.com/kwangthiag/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andrechuakj/ip.git... -Sep 18, 2023 1:14:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... +Sep 18, 2023 4:30:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andrechuakj/ip.git to complete... -Sep 18, 2023 1:14:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... -Sep 18, 2023 1:14:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! -Sep 18, 2023 1:14:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [121/480] Analyzing https://github.com/elhy1999/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kwangthiag/ip.git (master) completed! -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [122/480] Analyzing https://github.com/simbayippy/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:21 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WeeMingQing/ip.git... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WeeMingQing/ip.git to complete... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [54/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shuenj/ip.git completed! +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/andrechuakj/ip.git completed! -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aliciamichellew/ip.git... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lunaroddity/ip.git completed! -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shuenj/ip.git completed! -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/samuelmui8/ip.git... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lunaroddity/ip.git completed! +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/samuelmui8/ip.git to complete... -Sep 18, 2023 1:14:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/antonTan96/ip.git to complete... -Sep 18, 2023 1:14:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [123/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! -Sep 18, 2023 1:14:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [124/480] Analyzing https://github.com/bwangpj/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WeeMingQing/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/owenyeo/ip.git... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/owenyeo/ip.git to complete... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelmui8/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/gongg21/ip.git... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/antonTan96/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nabonitasen/ip.git... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/gongg21/ip.git... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/gongg21/ip.git to complete... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelmui8/ip.git completed! +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nabonitasen/ip.git... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/aliciamichellew/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/erohsikivar/ip.git... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/erohsikivar/ip.git to complete... -Sep 18, 2023 1:14:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [125/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [126/480] Analyzing https://github.com/weeweh/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/owenyeo/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/erohsikivar/ip.git... +Sep 18, 2023 4:30:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pzl111/ip.git... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [55/480] Analyzing https://github.com/oeggy03/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/erohsikivar/ip.git to complete... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pzl111/ip.git to complete... -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/gongg21/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/erohsikivar/ip.git completed! -Sep 18, 2023 1:14:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teozern1/ip.git... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/teozern1/ip.git to complete... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nabonitasen/ip.git completed! +Sep 18, 2023 4:30:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [127/480] Analyzing https://github.com/jylow/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [128/480] Analyzing https://github.com/s-peiran/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pzl111/ip.git completed! -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! +Sep 18, 2023 4:30:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [56/480] Analyzing https://github.com/p-xp/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/erohsikivar/ip.git completed! +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicleongyj/ip.git... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicleongyj/ip.git to complete... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pzl111/ip.git completed! +Sep 18, 2023 4:30:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/teozern1/ip.git completed! -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WinSheng1/ip.git... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Elijah5399/ip.git completed! -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryamgoh/ip.git... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryamgoh/ip.git to complete... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [129/480] Analyzing https://github.com/lawruixi/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jylow/ip.git (master) completed! -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [130/480] Analyzing https://github.com/LHeng1/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nabonitasen/ip.git completed! -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Elijah5399/ip.git completed! +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... -Sep 18, 2023 1:14:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicleongyj/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chen-Kuei/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chen-Kuei/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WinSheng1/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/conradsoon/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ryamgoh/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/conradsoon/ip.git... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GSgiansen/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/GSgiansen/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! -Sep 18, 2023 1:14:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [131/480] Analyzing https://github.com/Leb14/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yucongkoo/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! -Sep 18, 2023 1:14:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [132/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/et-irl/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/et-irl/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! +Sep 18, 2023 4:30:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Chen-Kuei/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/marioalvaro/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/marioalvaro/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/conradsoon/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Seonlo99/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/GSgiansen/ip.git completed! -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joel-foo/ip.git... -Sep 18, 2023 1:14:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... -Sep 18, 2023 1:14:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [133/480] Analyzing https://github.com/brandon-nam/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/et-irl/ip.git completed! -Sep 18, 2023 1:14:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... +Sep 18, 2023 4:30:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! +Sep 18, 2023 4:30:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [58/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tim-pipi/ip.git... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tim-pipi/ip.git to complete... -Sep 18, 2023 1:14:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [134/480] Analyzing https://github.com/s-kybound/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/marioalvaro/ip.git completed! -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/marcellaantania/ip.git... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Seonlo99/ip.git completed! -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tim-pipi/ip.git completed! +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/brendanneojw/ip.git... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/joel-foo/ip.git completed! -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/li-rongzhi/ip.git... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/joel-foo/ip.git completed! +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/li-rongzhi/ip.git to complete... -Sep 18, 2023 1:14:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [135/480] Analyzing https://github.com/wesho1107/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tim-pipi/ip.git completed! -Sep 18, 2023 1:14:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/KamiliArsyad/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [136/480] Analyzing https://github.com/B-enguin/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/marcellaantania/ip.git completed! -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/brendanneojw/ip.git completed! -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/trgao/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/li-rongzhi/ip.git completed! -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lilozz2/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lilozz2/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [137/480] Analyzing https://github.com/yihfei/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/KamiliArsyad/ip.git completed! -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jean-cq/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [59/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/trgao/ip.git completed! -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jedkohjk/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yytan25/ip.git... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jedkohjk/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... -Sep 18, 2023 1:14:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! -Sep 18, 2023 1:14:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [138/480] Analyzing https://github.com/Angelyxx/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! +Sep 18, 2023 4:30:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lilozz2/ip.git completed! -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [60/480] Analyzing https://github.com/chiayunrong/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yytan25/ip.git... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryantzr1/ip.git... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jean-cq/ip.git completed! -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/maypfv/ip.git... -Sep 18, 2023 1:14:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... -Sep 18, 2023 1:14:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [139/480] Analyzing https://github.com/ricketytoc/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jedkohjk/ip.git completed! -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yytan25/ip.git completed! -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TohLiYuan/ip.git... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ryantzr1/ip.git completed! -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yytan25/ip.git completed! +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ChongWeiJie29/ip.git... -Sep 18, 2023 1:14:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ChongWeiJie29/ip.git to complete... -Sep 18, 2023 1:14:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [140/480] Analyzing https://github.com/dlathyun/ip.git (master)... -Sep 18, 2023 1:14:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/maypfv/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Goh-Li-Ting/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Goh-Li-Ting/ip.git to complete... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... +Sep 18, 2023 4:30:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [61/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kristayeo/ip.git to complete... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/derekjxtan/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/derekjxtan/ip.git to complete... -Sep 18, 2023 1:14:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [141/480] Analyzing https://github.com/AaronJT1/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shashahchk/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... -Sep 18, 2023 1:14:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [142/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chandan8186/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... -Sep 18, 2023 1:14:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [143/480] Analyzing https://github.com/jordankanghm/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/derekjxtan/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [62/480] Analyzing https://github.com/devanshubisht/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kristayeo/ip.git completed! -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/derekjxtan/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AndrewJanong/ip.git... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... -Sep 18, 2023 1:14:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... -Sep 18, 2023 1:14:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shashahchk/ip.git completed! -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... -Sep 18, 2023 1:14:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [144/480] Analyzing https://github.com/jingting1412/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Chandan8186/ip.git completed! -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/laurenlim2112/ip.git... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... -Sep 18, 2023 1:14:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [145/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... +Sep 18, 2023 4:30:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [63/480] Analyzing https://github.com/jx124/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... +Sep 18, 2023 4:30:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lambraydon/ip.git to complete... -Sep 18, 2023 1:14:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [146/480] Analyzing https://github.com/adhigop13/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... -Sep 18, 2023 1:14:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kailash201/ip.git completed! -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chonguschonguschongus/ip.git... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lshaoqin/ip.git... -Sep 18, 2023 1:14:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... -Sep 18, 2023 1:14:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... -Sep 18, 2023 1:14:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... -Sep 18, 2023 1:14:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! -Sep 18, 2023 1:14:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [147/480] Analyzing https://github.com/raydenlim/ip.git (master)... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! +Sep 18, 2023 4:30:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [64/480] Analyzing https://github.com/AryanG01/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lambraydon/ip.git completed! -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sk2001git/ip.git completed! +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/peasantbird/ip.git... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/peasantbird/ip.git to complete... -Sep 18, 2023 1:14:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sk2001git/ip.git completed! -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WangCheng0116/ip.git... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WangCheng0116/ip.git to complete... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lshaoqin/ip.git completed! -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teozhengyang/ip.git... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chonguschonguschongus/ip.git completed! -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chewjh1234/ip.git... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chewjh1234/ip.git to complete... -Sep 18, 2023 1:14:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/peasantbird/ip.git completed! -Sep 18, 2023 1:14:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/elaineshijie/ip.git... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... -Sep 18, 2023 1:14:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! -Sep 18, 2023 1:14:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [148/480] Analyzing https://github.com/jingyu987/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WangCheng0116/ip.git completed! -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lynnlow175/ip.git... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lynnlow175/ip.git to complete... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chewjh1234/ip.git completed! -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lordidiot/ip.git... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jx124/ip.git (master) completed! +Sep 18, 2023 4:30:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [65/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lordidiot/ip.git to complete... -Sep 18, 2023 1:14:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! -Sep 18, 2023 1:14:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [149/480] Analyzing https://github.com/FerdiHS/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elaineshijie/ip.git completed! -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... +Sep 18, 2023 4:30:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lynnlow175/ip.git completed! +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chew01/ip.git... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elaineshijie/ip.git completed! +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... -Sep 18, 2023 1:14:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lynnlow175/ip.git completed! -Sep 18, 2023 1:14:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RSXIX/ip.git to complete... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! +Sep 18, 2023 4:30:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [66/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lordidiot/ip.git completed! -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/juliusgambe/ip.git... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... -Sep 18, 2023 1:14:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [150/480] Analyzing https://github.com/jrchoo/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teozhengyang/ip.git completed! -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chew01/ip.git completed! -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WZWren/ip.git... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... -Sep 18, 2023 1:14:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [151/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [152/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juliusgambe/ip.git completed! +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RSXIX/ip.git completed! -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WZWren/ip.git... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/inezkok/ip.git... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juliusgambe/ip.git completed! -Sep 18, 2023 1:14:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/inezkok/ip.git to complete... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teozhengyang/ip.git completed! +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... -Sep 18, 2023 1:14:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zhonghan721/ip.git completed! -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! +Sep 18, 2023 4:30:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [67/480] Analyzing https://github.com/sheryew/ip.git (master)... +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kokrui/ip.git... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WZWren/ip.git completed! -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/inezkok/ip.git completed! +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WZWren/ip.git completed! +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jinyang628/ip.git... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! -Sep 18, 2023 1:14:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [153/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/inezkok/ip.git completed! -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wasjoe1/ip.git completed! -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nananakx-x/ip.git... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ylyma/ip.git... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [68/480] Analyzing https://github.com/jonasongg/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wasjoe1/ip.git completed! +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ylyma/ip.git... +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ylyma/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! -Sep 18, 2023 1:14:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [154/480] Analyzing https://github.com/darrentfy/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kokrui/ip.git completed! -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jinyang628/ip.git completed! -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/timetraveller-123/ip.git... -Sep 18, 2023 1:14:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... -Sep 18, 2023 1:14:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/juzzztinsoong/ip.git (master) completed! -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [155/480] Analyzing https://github.com/redtailedfox/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/redtailedfox/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/redtailedfox/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nananakx-x/ip.git completed! -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [69/480] Analyzing https://github.com/yiwen101/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AnnabelTing/ip.git completed! -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LicongHuang/ip.git completed! +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/EricXiong420/ip.git... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... -Sep 18, 2023 1:14:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/darrentfy/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/darrentfy/ip.git (master) completed! -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [156/480] Analyzing https://github.com/Fallman2/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/redtailedfox/ip.git (master) completed! -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [157/480] Analyzing https://github.com/Heran9/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Fallman2/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Fallman2/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ylyma/ip.git completed! -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jovkusuma/ip.git... -Sep 18, 2023 1:14:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Heran9/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Heran9/ip.git (master)... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jovkusuma/ip.git to complete... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LicongHuang/ip.git completed! -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! +Sep 18, 2023 4:30:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [70/480] Analyzing https://github.com/tiongMax/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweng88/ip.git completed! +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bhnuka/ip.git... -Sep 18, 2023 1:14:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bhnuka/ip.git to complete... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweng88/ip.git completed! -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jovkusuma/ip.git completed! +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/J-hta-n/ip.git... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... -Sep 18, 2023 1:14:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Heran9/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Heran9/ip.git (master) completed! -Sep 18, 2023 1:14:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [158/480] Analyzing https://github.com/waseemingly/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/EricXiong420/ip.git completed! -Sep 18, 2023 1:14:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jovkusuma/ip.git completed! -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ylyma/ip.git completed! +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Tim-Siu/ip.git... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... -Sep 18, 2023 1:14:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/EricXiong420/ip.git completed! +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yarnmengnus/ip.git to complete... -Sep 18, 2023 1:14:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! -Sep 18, 2023 1:14:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [159/480] Analyzing https://github.com/VN-Hao/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/bhnuka/ip.git completed! -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sopa301/ip.git... -Sep 18, 2023 1:14:41 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/J-hta-n/ip.git completed! -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ngeeyonglim/ip.git... -Sep 18, 2023 1:14:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ngeeyonglim/ip.git to complete... -Sep 18, 2023 1:14:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/flexibo/ip.git... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... -Sep 18, 2023 1:14:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! -Sep 18, 2023 1:14:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sopa301/ip.git completed! -Sep 18, 2023 1:14:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [160/480] Analyzing https://github.com/jingjie88/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ItsTYtan/ip.git... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/javinchua/ip.git... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ItsTYtan/ip.git to complete... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... -Sep 18, 2023 1:14:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! +Sep 18, 2023 4:30:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sopa301/ip.git completed! +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/javinchua/ip.git... +Sep 18, 2023 4:30:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... +Sep 18, 2023 4:30:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/amosting/ip.git... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/amosting/ip.git to complete... -Sep 18, 2023 1:14:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/flexibo/ip.git completed! -Sep 18, 2023 1:14:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! -Sep 18, 2023 1:14:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [161/480] Analyzing https://github.com/H1410101/ip.git (master)... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Cleon2/ip.git... -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! -Sep 18, 2023 1:14:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Cleon2/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ketweeen/ip.git... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/javinchua/ip.git completed! -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ketweeen/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! +Sep 18, 2023 4:30:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/javinchua/ip.git completed! +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sudarshan2401/ip.git... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sudarshan2401/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/amosting/ip.git completed! -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... -Sep 18, 2023 1:14:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... -Sep 18, 2023 1:14:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! -Sep 18, 2023 1:14:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [162/480] Analyzing https://github.com/kimshitong/ip.git (master)... -Sep 18, 2023 1:14:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kimshitong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kimshitong/ip.git (master)... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Cleon2/ip.git completed! -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Respirayson/ip.git... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ketweeen/ip.git completed! -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ketweeen/ip.git completed! +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chrainx/ip.git... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chrainx/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wui-hong/ip.git completed! -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! +Sep 18, 2023 4:30:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wui-hong/ip.git completed! +Sep 18, 2023 4:30:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... -Sep 18, 2023 1:14:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sunzihan23/ip.git... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sunzihan23/ip.git to complete... -Sep 18, 2023 1:14:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... -Sep 18, 2023 1:14:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... -Sep 18, 2023 1:14:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! -Sep 18, 2023 1:14:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [163/480] Analyzing https://github.com/ivanleekk/ip.git (master)... -Sep 18, 2023 1:14:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Respirayson/ip.git completed! -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wj331/ip.git... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/sunzihan23/ip.git completed! -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tjch-o/ip.git... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tjch-o/ip.git to complete... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/licongshen12/ip.git... -Sep 18, 2023 1:14:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wj331/ip.git completed! +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... -Sep 18, 2023 1:14:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 18, 2023 1:14:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 18, 2023 1:14:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ivanleekk/ip.git (master) completed! -Sep 18, 2023 1:14:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [164/480] Analyzing https://github.com/lamchenghou/ip.git (master)... -Sep 18, 2023 1:14:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lamchenghou/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lamchenghou/ip.git (master)... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chrainx/ip.git completed! -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mamayuan/ip.git... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... +Sep 18, 2023 4:30:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! +Sep 18, 2023 4:30:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [74/480] Analyzing https://github.com/nicolengk/ip.git (master)... +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mamayuan/ip.git to complete... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wj331/ip.git completed! -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chrainx/ip.git completed! +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ong-wei-hong/ip.git... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mamayuan/ip.git completed! +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ong-wei-hong/ip.git to complete... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/licongshen12/ip.git completed! -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tjch-o/ip.git completed! -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanboonkhong/ip.git... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cbj252/ip.git... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanboonkhong/ip.git to complete... -Sep 18, 2023 1:14:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tjch-o/ip.git completed! +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cbj252/ip.git... +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/licongshen12/ip.git completed! +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cbj252/ip.git to complete... -Sep 18, 2023 1:14:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mamayuan/ip.git completed! -Sep 18, 2023 1:14:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! -Sep 18, 2023 1:14:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [165/480] Analyzing https://github.com/tayruxin/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlfredBeNoel/ip.git... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlfredBeNoel/ip.git to complete... -Sep 18, 2023 1:14:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [75/480] Analyzing https://github.com/newway1814/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ong-wei-hong/ip.git completed! -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/keaganpzh/ip.git... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cbj252/ip.git completed! -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ElginTZM/ip.git... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [76/480] Analyzing https://github.com/glenngnng/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ElginTZM/ip.git to complete... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cbj252/ip.git completed! +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... -Sep 18, 2023 1:14:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tayruxin/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tayruxin/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tayruxin/ip.git (master) completed! -Sep 18, 2023 1:14:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [166/480] Analyzing https://github.com/raynertjx/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AlfredBeNoel/ip.git completed! -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/keaganpzh/ip.git completed! -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cmHuang777/ip.git... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cmHuang777/ip.git to complete... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/keaganpzh/ip.git completed! +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WeeeHung/ip.git... -Sep 18, 2023 1:14:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ElginTZM/ip.git completed! -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xxiaoweii/ip.git... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LimJH2002/ip.git completed! -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xxiaoweii/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LimJH2002/ip.git completed! +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/rayyan35p/ip.git... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... -Sep 18, 2023 1:14:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... -Sep 18, 2023 1:14:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... -Sep 18, 2023 1:14:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! -Sep 18, 2023 1:14:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [167/480] Analyzing https://github.com/zhengyup/ip.git (master)... -Sep 18, 2023 1:14:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/cmHuang777/ip.git completed! -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [77/480] Analyzing https://github.com/kanna-1/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dhruvir29/ip.git... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dhruvir29/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WeeeHung/ip.git completed! -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LinWanLeii/ip.git... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WeeeHung/ip.git completed! +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LinWanLeii/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rayyan35p/ip.git completed! -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Song-Mengfei/ip.git... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Song-Mengfei/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [78/480] Analyzing https://github.com/zsh-eng/ip.git (master)... +Sep 18, 2023 4:30:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rayyan35p/ip.git completed! +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... -Sep 18, 2023 1:14:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... -Sep 18, 2023 1:14:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... -Sep 18, 2023 1:14:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! -Sep 18, 2023 1:14:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [168/480] Analyzing https://github.com/larrywang0701/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/larrywang0701/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/larrywang0701/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [169/480] Analyzing https://github.com/Carlintyj/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dhruvir29/ip.git completed! -Sep 18, 2023 1:14:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiif/ip.git... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... -Sep 18, 2023 1:14:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/larrywang0701/ip.git (master) completed! -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [170/480] Analyzing https://github.com/wxwern/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiif/ip.git... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicholascher/ip.git to complete... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/hcs1203/ip.git to complete... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/papataco14/ip.git... -Sep 18, 2023 1:14:48 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/papataco14/ip.git to complete... -Sep 18, 2023 1:14:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! -Sep 18, 2023 1:14:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [171/480] Analyzing https://github.com/nubnubyas/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nubnubyas/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nubnubyas/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tiif/ip.git completed! -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholascher/ip.git completed! +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/KamJiaYue/ip.git... -Sep 18, 2023 1:14:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/hcs1203/ip.git completed! -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/NereusWB922/ip.git... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/NereusWB922/ip.git to complete... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholascher/ip.git completed! -Sep 18, 2023 1:14:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [172/480] Analyzing https://github.com/aslam341/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/PohSayKeong/ip.git... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PohSayKeong/ip.git to complete... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aslam341/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aslam341/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... +Sep 18, 2023 4:30:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... +Sep 18, 2023 4:30:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! +Sep 18, 2023 4:30:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [79/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/papataco14/ip.git completed! -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ivyy-poison/ip.git... -Sep 18, 2023 1:14:49 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ivyy-poison/ip.git to complete... -Sep 18, 2023 1:14:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [173/480] Analyzing https://github.com/LWZ19/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/aslam341/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/aslam341/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/aslam341/ip.git (master) completed! -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [174/480] Analyzing https://github.com/timleow/ip.git (master)... -Sep 18, 2023 1:14:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/timleow/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/timleow/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... +Sep 18, 2023 4:30:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/PohSayKeong/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/NereusWB922/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jacobcuison/ip.git to complete... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/NereusWB922/ip.git completed! +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... +Sep 18, 2023 4:30:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... +Sep 18, 2023 4:30:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kohkaijie/ip.git to complete... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [80/480] Analyzing https://github.com/mingyuanc/ip.git (master)... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/rocketninja7/ip.git... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... -Sep 18, 2023 1:14:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/timleow/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! -Sep 18, 2023 1:14:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [175/480] Analyzing https://github.com/rayshawntan/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/timleow/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/timleow/ip.git (master) completed! -Sep 18, 2023 1:14:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jacobcuison/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rocketninja7/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zekone/ip.git... -Sep 18, 2023 1:14:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rocketninja7/ip.git completed! +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/markgcera/ip.git... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ji-just-ji/ip.git completed! -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/markgcera/ip.git to complete... -Sep 18, 2023 1:14:50 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/PearlynnT/ip.git... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PearlynnT/ip.git to complete... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kohkaijie/ip.git completed! -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zekone/ip.git completed! +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/markgcera/ip.git completed! -Sep 18, 2023 1:14:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/aexolate/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kohkaijie/ip.git completed! +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TeeRenJing/ip.git... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... +Sep 18, 2023 4:30:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TeeRenJing/ip.git to complete... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zekone/ip.git completed! -Sep 18, 2023 1:14:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... +Sep 18, 2023 4:30:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! +Sep 18, 2023 4:30:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [81/480] Analyzing https://github.com/seewhyjay/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/markgcera/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... -Sep 18, 2023 1:14:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/aexolate/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/aexolate/ip.git (master) completed! -Sep 18, 2023 1:14:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [177/480] Analyzing https://github.com/Sheeepen/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/rayshawntan/ip.git (master) completed! -Sep 18, 2023 1:14:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [178/480] Analyzing https://github.com/shuyangk/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/PearlynnT/ip.git completed! -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dloh2236/ip.git... -Sep 18, 2023 1:14:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shuyangk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shuyangk/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dloh2236/ip.git to complete... -Sep 18, 2023 1:14:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zannloo/ip.git... -Sep 18, 2023 1:14:51 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zannloo/ip.git to complete... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [179/480] Analyzing https://github.com/ncmathan/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mounilsankar/ip.git completed! -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/junnengsoo/ip.git... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/junnengsoo/ip.git to complete... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dloh2236/ip.git completed! -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mounilsankar/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kokseng1/ip.git... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zannloo/ip.git completed! -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Sheeepen/ip.git (master) completed! -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [180/480] Analyzing https://github.com/iyioon/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [82/480] Analyzing https://github.com/GlendaChong/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kokseng1/ip.git to complete... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zannloo/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/junnengsoo/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/itsNatTan/ip.git... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/itsNatTan/ip.git to complete... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/iyioon/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/iyioon/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ncmathan/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ncmathan/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ncmathan/ip.git (master) completed! -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [181/480] Analyzing https://github.com/kiwibang/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kiwibang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kiwibang/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/iyioon/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/iyioon/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/iyioon/ip.git (master) completed! -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [182/480] Analyzing https://github.com/LuoZYi/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LuoZYi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LuoZYi/ip.git (master)... -Sep 18, 2023 1:14:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/junnengsoo/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ZD292/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kokseng1/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... +Sep 18, 2023 4:30:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/alientian/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/itsNatTan/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/alientian/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [83/480] Analyzing https://github.com/starrylight99/ip.git (master)... +Sep 18, 2023 4:30:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alientian/ip.git completed! +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/itsNatTan/ip.git completed! +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/frrrrry/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LuoZYi/ip.git (master) completed! -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [183/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kiwibang/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kiwibang/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kiwibang/ip.git (master) completed! -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [184/480] Analyzing https://github.com/sushiyade/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sushiyade/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sushiyade/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ZD292/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/frrrrry/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tjingsheng/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alientian/ip.git completed! -Sep 18, 2023 1:14:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sushiyade/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ZD292/ip.git completed! +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wanghejin/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SungMatt/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sushiyade/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sushiyade/ip.git (master) completed! -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [185/480] Analyzing https://github.com/Nid21cs/ip.git (master)... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! +Sep 18, 2023 4:30:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [84/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! +Sep 18, 2023 4:30:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [85/480] Analyzing https://github.com/ruth-lim/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/frrrrry/ip.git completed! +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andrefoo/ip.git to complete... -Sep 18, 2023 1:14:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nid21cs/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nid21cs/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Nid21cs/ip.git (master) completed! -Sep 18, 2023 1:14:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [186/480] Analyzing https://github.com/McNaBry/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/McNaBry/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/McNaBry/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/asdfghjkxd/ip.git (master) completed! -Sep 18, 2023 1:14:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [187/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/MagnificentCreature/ip.git completed! -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tohpinren/ip.git to complete... -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/andrefoo/ip.git completed! -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wanghejin/ip.git completed! +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wanghejin/ip.git completed! -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/andrefoo/ip.git completed! +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xavierpok/ip.git... -Sep 18, 2023 1:14:54 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xavierpok/ip.git to complete... -Sep 18, 2023 1:14:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... -Sep 18, 2023 1:14:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tohpinren/ip.git completed! -Sep 18, 2023 1:14:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/McNaBry/ip.git (master)... -Sep 18, 2023 1:14:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/McNaBry/ip.git (master) completed! -Sep 18, 2023 1:14:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [188/480] Analyzing https://github.com/miljyy/ip.git (master)... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [86/480] Analyzing https://github.com/zacwong2151/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bkjwjason/ip.git... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bkjwjason/ip.git to complete... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/XihuaZ/ip.git completed! -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Choonyan02/ip.git... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... -Sep 18, 2023 1:14:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/miljyy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/miljyy/ip.git (master)... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/xavierpok/ip.git completed! -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aarontxz/ip.git... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aarontxz/ip.git to complete... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SungMatt/ip.git completed! -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bkjwjason/ip.git completed! +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... -Sep 18, 2023 1:14:55 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jianyangg/ip.git to complete... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bkjwjason/ip.git completed! -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SungMatt/ip.git completed! +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tayian/ip.git... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Choonyan02/ip.git completed! -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/miljyy/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wnchan/ip.git... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [189/480] Analyzing https://github.com/ncduy0303/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/miljyy/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/miljyy/ip.git (master) completed! -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [190/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/aarontxz/ip.git completed! -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wnchan/ip.git... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Jweewee/ip.git... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... +Sep 18, 2023 4:30:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Jweewee/ip.git to complete... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [87/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jianyangg/ip.git completed! -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cyaoxuan/ip.git to complete... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! +Sep 18, 2023 4:30:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [88/480] Analyzing https://github.com/limzhenwy/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tayian/ip.git completed! -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/eyelessrhyme7/ip.git (master) completed! -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [191/480] Analyzing https://github.com/ruishanteo/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ncduy0303/ip.git (master) completed! -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wnchan/ip.git completed! -Sep 18, 2023 1:14:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [192/480] Analyzing https://github.com/m1oojv/ip.git (master)... -Sep 18, 2023 1:14:56 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/m1oojv/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/m1oojv/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Jweewee/ip.git completed! -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/saltedfishxx/ip.git... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/saltedfishxx/ip.git to complete... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlagappanRa/ip.git... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... -Sep 18, 2023 1:14:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/m1oojv/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Ken-Lai/ip.git... -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... -Sep 18, 2023 1:14:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/m1oojv/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/m1oojv/ip.git (master) completed! -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [194/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/saltedfishxx/ip.git completed! -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/felibunnyy/ip.git... -Sep 18, 2023 1:14:57 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/felibunnyy/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [89/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [90/480] Analyzing https://github.com/teoks0199/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/felibunnyy/ip.git completed! +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/itssisi/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/euchangxian/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jamz903/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Ken-Lai/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kevin-Liusx/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Nixx162/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Nixx162/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Nixx162/ip.git (master) completed! -Sep 18, 2023 1:14:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [195/480] Analyzing https://github.com/mfjkri/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mfjkri/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mfjkri/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/felibunnyy/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/euchangxian/ip.git completed! +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Propene-Dan/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Gabriel4357/ip.git (master) completed! -Sep 18, 2023 1:14:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [196/480] Analyzing https://github.com/junhonglow/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/junhonglow/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/junhonglow/ip.git (master)... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/itssisi/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jamz903/ip.git completed! +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ChuanXinNg/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ChuanXinNg/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jamz903/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/itssisi/ip.git completed! +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kenvynKwek/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Ruizhi2001/ip.git... -Sep 18, 2023 1:14:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/junhonglow/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/junhonglow/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/junhonglow/ip.git (master) completed! -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [197/480] Analyzing https://github.com/RoeReRe/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [198/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RoeReRe/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RoeReRe/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/prawnzyy/ip.git... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/prawnzyy/ip.git to complete... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! +Sep 18, 2023 4:30:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [91/480] Analyzing https://github.com/awhb/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ChuanXinNg/ip.git completed! -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/saraozn/ip.git... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [199/480] Analyzing https://github.com/nknguyenhc/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/prawnzyy/ip.git completed! +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nknguyenhc/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nknguyenhc/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [92/480] Analyzing https://github.com/qz1004/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! +Sep 18, 2023 4:30:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Ruizhi2001/ip.git completed! -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/DistractedCat/ip.git... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [200/480] Analyzing https://github.com/winson8222/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/winson8222/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:14:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/winson8222/ip.git (master)... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/prawnzyy/ip.git completed! -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yezkez10/ip.git... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yezkez10/ip.git to complete... -Sep 18, 2023 1:14:59 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/saraozn/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/revdrag/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/DistractedCat/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! -Sep 18, 2023 1:15:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nknguyenhc/ip.git (master) completed! -Sep 18, 2023 1:15:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [201/480] Analyzing https://github.com/wujy28/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [202/480] Analyzing https://github.com/SimWPEric/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SimWPEric/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SimWPEric/ip.git (master)... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yezkez10/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/billieboy7/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/billieboy7/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/revdrag/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jannnice/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jannnice/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/awhb/ip.git (master) completed! +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/alvinlim277/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonRay168/ip.git completed! -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [93/480] Analyzing https://github.com/pangyyen/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonRay168/ip.git completed! +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/billieboy7/ip.git completed! +Sep 18, 2023 4:30:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... -Sep 18, 2023 1:15:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wujy28/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wujy28/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wujy28/ip.git (master) completed! -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [203/480] Analyzing https://github.com/HugeNoob/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/HugeNoob/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/HugeNoob/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SimWPEric/ip.git (master) completed! -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [204/480] Analyzing https://github.com/lerxuann/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/billieboy7/ip.git completed! -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dinde2004/ip.git... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! +Sep 18, 2023 4:30:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [94/480] Analyzing https://github.com/Mahidharah/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dinde2004/ip.git to complete... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jannnice/ip.git completed! -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seanpzk/ip.git... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seanpzk/ip.git to complete... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/samuelim01/ip.git completed! -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/evanyan13/ip.git completed! -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner spawnCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lsyurea/ip.git... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lerxuann/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HugeNoob/ip.git (master) completed! -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [205/480] Analyzing https://github.com/maj0-0/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dinde2004/ip.git completed! +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... +Sep 18, 2023 4:30:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seanpzk/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! +Sep 18, 2023 4:30:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [95/480] Analyzing https://github.com/jason-raiin/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lsyurea/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sasmik23/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... +Sep 18, 2023 4:30:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/leontan2/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [96/480] Analyzing https://github.com/ravern/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/geraldngjx/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leontan2/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/garylow2001/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wamps-jp/ip.git completed! +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... +Sep 18, 2023 4:30:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lululwtv/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wr1159/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dickongwd/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! +Sep 18, 2023 4:30:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [97/480] Analyzing https://github.com/bobscodedump/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wr1159/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nauxe/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ravern/ip.git (master) completed! +Sep 18, 2023 4:30:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [98/480] Analyzing https://github.com/ryanozx/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhanyang01/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/czhiruo/ip.git completed! +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... +Sep 18, 2023 4:30:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/longnguyentan/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [99/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Eola-Z/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cikguseven/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/victorpengmx/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [100/480] Analyzing https://github.com/techjay-c/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [101/480] Analyzing https://github.com/HEEaZ/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jibtaf/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dylkaw/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lipwei1808/ip.git completed! +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... +Sep 18, 2023 4:30:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nikele2001/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/craigtonlian/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! +Sep 18, 2023 4:30:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [102/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/iantsaii/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/brein62/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wjacobw/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! +Sep 18, 2023 4:30:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [103/480] Analyzing https://github.com/dom-buri/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruo-x/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brein62/ip.git completed! +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... +Sep 18, 2023 4:30:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kiatkat/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/MadLamprey/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jiakai-17/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xyT-T/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nreHieW/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marquestye/ip.git... +Sep 18, 2023 4:30:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! +Sep 18, 2023 4:30:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [104/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... +Sep 18, 2023 4:30:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Saezenn/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marquestye/ip.git completed! +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... +Sep 18, 2023 4:30:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sebtey/ip.git completed! +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rionshocker/ip.git completed! +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tyouwei/ip.git completed! +Sep 18, 2023 4:30:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [108/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [109/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [110/480] Analyzing https://github.com/beatricecst/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... +Sep 18, 2023 4:30:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/beatricecst/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/beatricecst/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [111/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/beatricecst/ip.git (master) completed! +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [112/480] Analyzing https://github.com/thienmy0/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/thienmy0/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/thienmy0/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/thienmy0/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/thienmy0/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/thienmy0/ip.git (master) completed! +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [113/480] Analyzing https://github.com/s0ngyang/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [114/480] Analyzing https://github.com/ldinghan/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [115/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ldinghan/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ldinghan/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ldinghan/ip.git (master) completed! +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [116/480] Analyzing https://github.com/ryanongwx/ip.git (master)... +Sep 18, 2023 4:30:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryanongwx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryanongwx/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [117/480] Analyzing https://github.com/kwangthiag/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [118/480] Analyzing https://github.com/elhy1999/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kwangthiag/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kwangthiag/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kwangthiag/ip.git (master) completed! +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [119/480] Analyzing https://github.com/songgthu/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [120/480] Analyzing https://github.com/GohTengFong/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [121/480] Analyzing https://github.com/simbayippy/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [122/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 18, 2023 4:30:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [123/480] Analyzing https://github.com/bwangpj/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [124/480] Analyzing https://github.com/AlainS87/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [125/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [126/480] Analyzing https://github.com/weeweh/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... +Sep 18, 2023 4:30:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [127/480] Analyzing https://github.com/s-peiran/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [128/480] Analyzing https://github.com/jylow/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jylow/ip.git (master) completed! +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [129/480] Analyzing https://github.com/lawruixi/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! +Sep 18, 2023 4:30:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [130/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [131/480] Analyzing https://github.com/brandon-nam/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [132/480] Analyzing https://github.com/LHeng1/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [133/480] Analyzing https://github.com/B-enguin/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [134/480] Analyzing https://github.com/Leb14/ip.git (master)... +Sep 18, 2023 4:30:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [135/480] Analyzing https://github.com/s-kybound/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [136/480] Analyzing https://github.com/wesho1107/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [137/480] Analyzing https://github.com/yihfei/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [138/480] Analyzing https://github.com/AaronJT1/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [139/480] Analyzing https://github.com/dlathyun/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [140/480] Analyzing https://github.com/ricketytoc/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... +Sep 18, 2023 4:30:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [142/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [143/480] Analyzing https://github.com/jingting1412/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [144/480] Analyzing https://github.com/jordankanghm/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [145/480] Analyzing https://github.com/adhigop13/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [146/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! +Sep 18, 2023 4:30:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [147/480] Analyzing https://github.com/raydenlim/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [148/480] Analyzing https://github.com/jingyu987/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [149/480] Analyzing https://github.com/FerdiHS/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [150/480] Analyzing https://github.com/jrchoo/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [151/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [152/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... +Sep 18, 2023 4:30:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [153/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [154/480] Analyzing https://github.com/darrentfy/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/juzzztinsoong/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/juzzztinsoong/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/juzzztinsoong/ip.git (master) completed! +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [155/480] Analyzing https://github.com/redtailedfox/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/redtailedfox/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/redtailedfox/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/darrentfy/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/darrentfy/ip.git (master) completed! +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [156/480] Analyzing https://github.com/Fallman2/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Fallman2/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Fallman2/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/redtailedfox/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/redtailedfox/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/redtailedfox/ip.git (master) completed! +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [157/480] Analyzing https://github.com/Heran9/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Heran9/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Heran9/ip.git (master)... +Sep 18, 2023 4:30:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [158/480] Analyzing https://github.com/VN-Hao/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Heran9/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Heran9/ip.git (master) completed! +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [159/480] Analyzing https://github.com/jingjie88/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [160/480] Analyzing https://github.com/H1410101/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [161/480] Analyzing https://github.com/kimshitong/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kimshitong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kimshitong/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [162/480] Analyzing https://github.com/ivanleekk/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [163/480] Analyzing https://github.com/lamchenghou/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lamchenghou/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lamchenghou/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ivanleekk/ip.git (master)... +Sep 18, 2023 4:30:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ivanleekk/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ivanleekk/ip.git (master) completed! +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [164/480] Analyzing https://github.com/tayruxin/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tayruxin/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tayruxin/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tayruxin/ip.git (master) completed! +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [165/480] Analyzing https://github.com/waseemingly/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [166/480] Analyzing https://github.com/raynertjx/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [167/480] Analyzing https://github.com/zhengyup/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... +Sep 18, 2023 4:30:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [168/480] Analyzing https://github.com/larrywang0701/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/larrywang0701/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/larrywang0701/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/larrywang0701/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/larrywang0701/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/larrywang0701/ip.git (master) completed! +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [169/480] Analyzing https://github.com/Carlintyj/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [170/480] Analyzing https://github.com/wxwern/ip.git (master)... +Sep 18, 2023 4:30:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:30:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [171/480] Analyzing https://github.com/nubnubyas/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nubnubyas/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nubnubyas/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [172/480] Analyzing https://github.com/LWZ19/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [173/480] Analyzing https://github.com/aslam341/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aslam341/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aslam341/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/aslam341/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/aslam341/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/aslam341/ip.git (master) completed! +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [174/480] Analyzing https://github.com/timleow/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/timleow/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/timleow/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [175/480] Analyzing https://github.com/rayshawntan/ip.git (master)... +Sep 18, 2023 4:31:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/timleow/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/timleow/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/timleow/ip.git (master) completed! +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/rayshawntan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/rayshawntan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/rayshawntan/ip.git (master) completed! +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [177/480] Analyzing https://github.com/Sheeepen/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/aexolate/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Sheeepen/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/aexolate/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/aexolate/ip.git (master) completed! +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [178/480] Analyzing https://github.com/ncmathan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Sheeepen/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Sheeepen/ip.git (master) completed! +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [179/480] Analyzing https://github.com/shuyangk/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shuyangk/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shuyangk/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ncmathan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ncmathan/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ncmathan/ip.git (master) completed! +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [180/480] Analyzing https://github.com/iyioon/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [181/480] Analyzing https://github.com/kiwibang/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/iyioon/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/iyioon/ip.git (master)... +Sep 18, 2023 4:31:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kiwibang/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kiwibang/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/iyioon/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/iyioon/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kiwibang/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/iyioon/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [182/480] Analyzing https://github.com/LuoZYi/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LuoZYi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LuoZYi/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kiwibang/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kiwibang/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [183/480] Analyzing https://github.com/sushiyade/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sushiyade/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sushiyade/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LuoZYi/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LuoZYi/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LuoZYi/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [184/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sushiyade/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sushiyade/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sushiyade/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [185/480] Analyzing https://github.com/Nid21cs/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nid21cs/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nid21cs/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Nid21cs/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Nid21cs/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Nid21cs/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [186/480] Analyzing https://github.com/McNaBry/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/McNaBry/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/McNaBry/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/asdfghjkxd/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/asdfghjkxd/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/asdfghjkxd/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [187/480] Analyzing https://github.com/miljyy/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/miljyy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/miljyy/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/McNaBry/ip.git (master)... +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/McNaBry/ip.git (master) completed! +Sep 18, 2023 4:31:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [188/480] Analyzing https://github.com/ncduy0303/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/miljyy/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/miljyy/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/miljyy/ip.git (master) completed! +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [189/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ncduy0303/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ncduy0303/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ncduy0303/ip.git (master) completed! +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [190/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/eyelessrhyme7/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/eyelessrhyme7/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/eyelessrhyme7/ip.git (master) completed! +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [191/480] Analyzing https://github.com/ruishanteo/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [192/480] Analyzing https://github.com/m1oojv/ip.git (master)... +Sep 18, 2023 4:31:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/m1oojv/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/m1oojv/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/m1oojv/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/m1oojv/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/m1oojv/ip.git (master) completed! +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [194/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Nixx162/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Nixx162/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Nixx162/ip.git (master) completed! +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [195/480] Analyzing https://github.com/mfjkri/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mfjkri/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mfjkri/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Gabriel4357/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Gabriel4357/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Gabriel4357/ip.git (master) completed! +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [196/480] Analyzing https://github.com/junhonglow/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/junhonglow/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/junhonglow/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [197/480] Analyzing https://github.com/RoeReRe/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RoeReRe/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RoeReRe/ip.git (master)... +Sep 18, 2023 4:31:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/junhonglow/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/junhonglow/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/junhonglow/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [198/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RoeReRe/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RoeReRe/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [199/480] Analyzing https://github.com/nknguyenhc/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nknguyenhc/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nknguyenhc/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [200/480] Analyzing https://github.com/winson8222/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/winson8222/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/winson8222/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nknguyenhc/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nknguyenhc/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [201/480] Analyzing https://github.com/SimWPEric/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SimWPEric/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SimWPEric/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [202/480] Analyzing https://github.com/wujy28/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SimWPEric/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wujy28/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SimWPEric/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SimWPEric/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [203/480] Analyzing https://github.com/HugeNoob/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wujy28/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wujy28/ip.git (master) completed! +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [204/480] Analyzing https://github.com/lerxuann/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/HugeNoob/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/HugeNoob/ip.git (master)... +Sep 18, 2023 4:31:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lerxuann/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lerxuann/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lerxuann/ip.git (master) completed! -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [206/480] Analyzing https://github.com/Weiennn/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [205/480] Analyzing https://github.com/maj0-0/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HugeNoob/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/maj0-0/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/maj0-0/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HugeNoob/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HugeNoob/ip.git (master) completed! +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [206/480] Analyzing https://github.com/Weiennn/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Weiennn/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Weiennn/ip.git (master)... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dinde2004/ip.git completed! -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... -Sep 18, 2023 1:15:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seanpzk/ip.git completed! -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lsyurea/ip.git completed! -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... -Sep 18, 2023 1:15:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/maj0-0/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... -Sep 18, 2023 1:15:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/maj0-0/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/maj0-0/ip.git (master) completed! -Sep 18, 2023 1:15:02 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepos INFO: [207/480] Analyzing https://github.com/qyaner/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/qyaner/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/qyaner/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Weiennn/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sasmik23/ip.git completed! -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/leontan2/ip.git... -Sep 18, 2023 1:15:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Weiennn/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Weiennn/ip.git (master) completed! -Sep 18, 2023 1:15:02 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepos INFO: [208/480] Analyzing https://github.com/ruiyangzh/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... -Sep 18, 2023 1:15:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ruiyangzh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ruiyangzh/ip.git (master)... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/geraldngjx/ip.git completed! -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... -Sep 18, 2023 1:15:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/garylow2001/ip.git completed! -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leontan2/ip.git completed! -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... -Sep 18, 2023 1:15:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/qyaner/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/qyaner/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/qyaner/ip.git (master) completed! -Sep 18, 2023 1:15:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [209/480] Analyzing https://github.com/hyc17003/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lululwtv/ip.git completed! -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wamps-jp/ip.git completed! -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wr1159/ip.git... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... -Sep 18, 2023 1:15:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [209/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bombbird2001/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bombbird2001/ip.git (master)... +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruiyangzh/ip.git (master) completed! -Sep 18, 2023 1:15:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [210/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bombbird2001/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bombbird2001/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dickongwd/ip.git completed! -Sep 18, 2023 1:15:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... -Sep 18, 2023 1:15:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [210/480] Analyzing https://github.com/hyc17003/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Bombbird2001/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Bombbird2001/ip.git (master) completed! +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [211/480] Analyzing https://github.com/adammangzijun/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/adammangzijun/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/adammangzijun/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wr1159/ip.git completed! -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [212/480] Analyzing https://github.com/andytoh1/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nauxe/ip.git completed! -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andytoh1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andytoh1/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... -Sep 18, 2023 1:15:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Bombbird2001/ip.git (master) completed! -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [213/480] Analyzing https://github.com/Originalidk/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andytoh1/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/andytoh1/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/andytoh1/ip.git (master) completed! -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [214/480] Analyzing https://github.com/quzhetao01/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [213/480] Analyzing https://github.com/Originalidk/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Originalidk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Originalidk/ip.git (master)... -Sep 18, 2023 1:15:04 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [214/480] Analyzing https://github.com/quzhetao01/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhanyang01/ip.git completed! -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/czhiruo/ip.git completed! -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/victorpengmx/ip.git completed! -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/longnguyentan/ip.git completed! -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... -Sep 18, 2023 1:15:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Originalidk/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Originalidk/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Originalidk/ip.git (master) completed! -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [215/480] Analyzing https://github.com/InfiBeyond/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [216/480] Analyzing https://github.com/Bearypop/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/InfiBeyond/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/InfiBeyond/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/InfiBeyond/ip.git (master) completed! -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [217/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [216/480] Analyzing https://github.com/Bearypop/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [217/480] Analyzing https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sp4ce-cowboy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 18, 2023 4:31:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sp4ce-cowboy/ip.git (master) completed! +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [218/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JasonLCY-Temp/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cikguseven/ip.git completed! -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... -Sep 18, 2023 1:15:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Eola-Z/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jibtaf/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lipwei1808/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Bearypop/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bearypop/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bearypop/ip.git (master) completed! -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [218/480] Analyzing https://github.com/wjayee/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [219/480] Analyzing https://github.com/wjayee/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wjayee/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wjayee/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonLCY-Temp/ip.git (master) completed! -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [219/480] Analyzing https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sp4ce-cowboy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sp4ce-cowboy/ip.git (master) completed! -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [220/480] Analyzing https://github.com/vivienherq/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vivienherq/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vivienherq/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wjayee/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wjayee/ip.git (master) completed! -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [221/480] Analyzing https://github.com/jonyeokj/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dylkaw/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nikele2001/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jonyeokj/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jonyeokj/ip.git (master)... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... -Sep 18, 2023 1:15:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... -Sep 18, 2023 1:15:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/vivienherq/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... -Sep 18, 2023 1:15:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jonyeokj/ip.git (master) completed! -Sep 18, 2023 1:15:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [222/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/vivienherq/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/vivienherq/ip.git (master) completed! -Sep 18, 2023 1:15:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [223/480] Analyzing https://github.com/jamesebond/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [222/480] Analyzing https://github.com/jamesebond/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jamesebond/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jamesebond/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/iantsaii/ip.git completed! -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/craigtonlian/ip.git completed! -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/brein62/ip.git... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruo-x/ip.git completed! -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... -Sep 18, 2023 1:15:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... -Sep 18, 2023 1:15:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jonyeokj/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jonyeokj/ip.git (master) completed! +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [223/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 18, 2023 4:31:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jamesebond/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jamesebond/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 18, 2023 1:15:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jamesebond/ip.git (master) completed! +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [224/480] Analyzing https://github.com/lyuanww/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/victorlaiyeeteng/ip.git (master) completed! -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [224/480] Analyzing https://github.com/lyuanww/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wjacobw/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [225/480] Analyzing https://github.com/yongning0310/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lyuanww/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lyuanww/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... -Sep 18, 2023 1:15:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jamesebond/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jamesebond/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jamesebond/ip.git (master) completed! -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [225/480] Analyzing https://github.com/Cloud7050/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cloud7050/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cloud7050/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brein62/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... -Sep 18, 2023 1:15:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lyuanww/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lyuanww/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lyuanww/ip.git (master) completed! -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [226/480] Analyzing https://github.com/yongning0310/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... -Sep 18, 2023 1:15:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Cloud7050/ip.git (master) completed! -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [227/480] Analyzing https://github.com/LoMaply/ip.git (master)... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kiatkat/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... -Sep 18, 2023 1:15:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/MadLamprey/ip.git completed! -Sep 18, 2023 1:15:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xyT-T/ip.git completed! -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... -Sep 18, 2023 1:15:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [226/480] Analyzing https://github.com/Cloud7050/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yongning0310/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cloud7050/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cloud7050/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yongning0310/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yongning0310/ip.git (master) completed! -Sep 18, 2023 1:15:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [228/480] Analyzing https://github.com/tllshan/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jiakai-17/ip.git completed! -Sep 18, 2023 1:15:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [227/480] Analyzing https://github.com/LoMaply/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LoMaply/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... -Sep 18, 2023 1:15:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... -Sep 18, 2023 1:15:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LoMaply/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LoMaply/ip.git (master) completed! -Sep 18, 2023 1:15:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [228/480] Analyzing https://github.com/tllshan/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cloud7050/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Cloud7050/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Cloud7050/ip.git (master) completed! +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [229/480] Analyzing https://github.com/Gavino3o/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nreHieW/ip.git completed! -Sep 18, 2023 1:15:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Gavino3o/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Gavino3o/ip.git (master)... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marquestye/ip.git... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Saezenn/ip.git completed! -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... -Sep 18, 2023 1:15:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... -Sep 18, 2023 1:15:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tllshan/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marquestye/ip.git completed! -Sep 18, 2023 1:15:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tllshan/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tllshan/ip.git (master) completed! -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... -Sep 18, 2023 1:15:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [230/480] Analyzing https://github.com/HollaG/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/HollaG/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/HollaG/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... -Sep 18, 2023 1:15:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tllshan/ip.git (master) completed! +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [230/480] Analyzing https://github.com/HollaG/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/HollaG/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/HollaG/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Gavino3o/ip.git (master) completed! -Sep 18, 2023 1:15:10 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [231/480] Analyzing https://github.com/cheeggered/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cheeggered/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cheeggered/ip.git (master)... -Sep 18, 2023 1:15:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sebtey/ip.git completed! -Sep 18, 2023 1:15:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/HollaG/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rionshocker/ip.git completed! -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/HollaG/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/HollaG/ip.git (master) completed! -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [232/480] Analyzing https://github.com/xenosf/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xenosf/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xenosf/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tyouwei/ip.git completed! -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cheeggered/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cheeggered/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cheeggered/ip.git (master) completed! -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [233/480] Analyzing https://github.com/neyapraveen/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/neyapraveen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/neyapraveen/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/neyapraveen/ip.git (master) completed! -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [234/480] Analyzing https://github.com/TehOPanas/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [233/480] Analyzing https://github.com/TehOPanas/ip.git (master)... +Sep 18, 2023 4:31:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xenosf/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xenosf/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xenosf/ip.git (master) completed! -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [235/480] Analyzing https://github.com/richiehx/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/richiehx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/richiehx/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [234/480] Analyzing https://github.com/neyapraveen/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/neyapraveen/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/neyapraveen/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TehOPanas/ip.git (master) completed! -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [236/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [235/480] Analyzing https://github.com/richiehx/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/richiehx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/richiehx/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/neyapraveen/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/neyapraveen/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/neyapraveen/ip.git (master) completed! +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [236/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlyssaPng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlyssaPng/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/richiehx/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ceilingFan456/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ceilingFan456/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/richiehx/ip.git (master)... -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/richiehx/ip.git (master) completed! -Sep 18, 2023 1:15:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [237/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlyssaPng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlyssaPng/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ceilingFan456/ip.git (master) completed! -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [238/480] Analyzing https://github.com/leezhengjing/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [237/480] Analyzing https://github.com/leezhengjing/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/leezhengjing/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/leezhengjing/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlyssaPng/ip.git (master) completed! -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [239/480] Analyzing https://github.com/seantehds/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [238/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ceilingFan456/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ceilingFan456/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ceilingFan456/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ceilingFan456/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ceilingFan456/ip.git (master) completed! +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [239/480] Analyzing https://github.com/seantehds/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepos INFO: [240/480] Analyzing https://github.com/Singa-pirate/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Singa-pirate/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Singa-pirate/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Singa-pirate/ip.git (master) completed! -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [241/480] Analyzing https://github.com/songfangyl/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [241/480] Analyzing https://github.com/lihongguang00/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seantehds/ip.git (master) completed! -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [242/480] Analyzing https://github.com/vansh284/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [242/480] Analyzing https://github.com/songfangyl/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/songfangyl/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/songfangyl/ip.git (master)... -Sep 18, 2023 1:15:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/vansh284/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/vansh284/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/songfangyl/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/songfangyl/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/songfangyl/ip.git (master) completed! -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [243/480] Analyzing https://github.com/lihongguang00/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [243/480] Analyzing https://github.com/vansh284/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/vansh284/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/vansh284/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepos INFO: [244/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/YeoBohShin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/YeoBohShin/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/YeoBohShin/ip.git (master) completed! -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [245/480] Analyzing https://github.com/andrechuakj/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [245/480] Analyzing https://github.com/shuenj/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [246/480] Analyzing https://github.com/andrechuakj/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... +Sep 18, 2023 4:31:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andrechuakj/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andrechuakj/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [246/480] Analyzing https://github.com/lunaroddity/ip.git (master)... -Sep 18, 2023 1:15:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lunaroddity/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lunaroddity/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/andrechuakj/ip.git (master) completed! -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [247/480] Analyzing https://github.com/shuenj/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lunaroddity/ip.git (master) completed! -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [248/480] Analyzing https://github.com/WeeMingQing/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WeeMingQing/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WeeMingQing/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [247/480] Analyzing https://github.com/lunaroddity/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lunaroddity/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lunaroddity/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shuenj/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shuenj/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shuenj/ip.git (master) completed! -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [249/480] Analyzing https://github.com/samuelmui8/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [248/480] Analyzing https://github.com/WeeMingQing/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WeeMingQing/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WeeMingQing/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lunaroddity/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lunaroddity/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lunaroddity/ip.git (master) completed! +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [249/480] Analyzing https://github.com/antonTan96/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/antonTan96/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/antonTan96/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WeeMingQing/ip.git (master) completed! -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [250/480] Analyzing https://github.com/antonTan96/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/antonTan96/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/antonTan96/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/samuelmui8/ip.git (master) completed! -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [251/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [250/480] Analyzing https://github.com/samuelmui8/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/antonTan96/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/antonTan96/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/antonTan96/ip.git (master) completed! -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [252/480] Analyzing https://github.com/owenyeo/ip.git (master)... -Sep 18, 2023 1:15:14 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [251/480] Analyzing https://github.com/owenyeo/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/owenyeo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/owenyeo/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/samuelmui8/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/samuelmui8/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/samuelmui8/ip.git (master) completed! +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [252/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... +Sep 18, 2023 4:31:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/owenyeo/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/owenyeo/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/owenyeo/ip.git (master) completed! -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [253/480] Analyzing https://github.com/erohsikivar/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [253/480] Analyzing https://github.com/gongg21/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/gongg21/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/gongg21/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/gongg21/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/gongg21/ip.git (master) completed! +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [254/480] Analyzing https://github.com/nabonitasen/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aliciamichellew/ip.git (master) completed! -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [254/480] Analyzing https://github.com/gongg21/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/gongg21/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/gongg21/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [255/480] Analyzing https://github.com/erohsikivar/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nabonitasen/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nabonitasen/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/erohsikivar/ip.git (master) completed! -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [255/480] Analyzing https://github.com/pzl111/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nabonitasen/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/pzl111/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/pzl111/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/gongg21/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/gongg21/ip.git (master) completed! -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [256/480] Analyzing https://github.com/teozern1/ip.git (master)... -Sep 18, 2023 1:15:15 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nabonitasen/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nabonitasen/ip.git (master) completed! +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [257/480] Analyzing https://github.com/teozern1/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/teozern1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/teozern1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teozern1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teozern1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teozern1/ip.git (master) completed! -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [257/480] Analyzing https://github.com/Elijah5399/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [258/480] Analyzing https://github.com/Elijah5399/ip.git (master)... +Sep 18, 2023 4:31:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Elijah5399/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Elijah5399/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/pzl111/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/pzl111/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/pzl111/ip.git (master) completed! -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [258/480] Analyzing https://github.com/nabonitasen/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nabonitasen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nabonitasen/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [259/480] Analyzing https://github.com/nicleongyj/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicleongyj/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicleongyj/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nabonitasen/ip.git (master) completed! -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [260/480] Analyzing https://github.com/WinSheng1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [260/480] Analyzing https://github.com/ryamgoh/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicleongyj/ip.git (master) completed! -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [261/480] Analyzing https://github.com/ryamgoh/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WinSheng1/ip.git (master) completed! -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [262/480] Analyzing https://github.com/yucongkoo/ip.git (master)... -Sep 18, 2023 1:15:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [261/480] Analyzing https://github.com/WinSheng1/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [262/480] Analyzing https://github.com/yucongkoo/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WinSheng1/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WinSheng1/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WinSheng1/ip.git (master) completed! +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [263/480] Analyzing https://github.com/Chen-Kuei/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chen-Kuei/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chen-Kuei/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yucongkoo/ip.git (master) completed! -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [264/480] Analyzing https://github.com/conradsoon/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chen-Kuei/ip.git (master)... +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/conradsoon/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/conradsoon/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chen-Kuei/ip.git (master) completed! -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [265/480] Analyzing https://github.com/GSgiansen/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/GSgiansen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/GSgiansen/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/conradsoon/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/conradsoon/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/conradsoon/ip.git (master) completed! -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [266/480] Analyzing https://github.com/et-irl/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/et-irl/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/et-irl/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/GSgiansen/ip.git (master) completed! -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [267/480] Analyzing https://github.com/marioalvaro/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/marioalvaro/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/marioalvaro/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/et-irl/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/et-irl/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/et-irl/ip.git (master) completed! -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [268/480] Analyzing https://github.com/Seonlo99/ip.git (master)... -Sep 18, 2023 1:15:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Seonlo99/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Seonlo99/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marioalvaro/ip.git (master) completed! -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [269/480] Analyzing https://github.com/joel-foo/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/joel-foo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/joel-foo/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [269/480] Analyzing https://github.com/tim-pipi/ip.git (master)... +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Seonlo99/ip.git (master) completed! -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [270/480] Analyzing https://github.com/tim-pipi/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [270/480] Analyzing https://github.com/joel-foo/ip.git (master)... +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/joel-foo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/joel-foo/ip.git (master)... +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [271/480] Analyzing https://github.com/marcellaantania/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/joel-foo/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/joel-foo/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/joel-foo/ip.git (master) completed! -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos INFO: [272/480] Analyzing https://github.com/brendanneojw/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/brendanneojw/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/brendanneojw/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [273/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marcellaantania/ip.git (master) completed! -Sep 18, 2023 1:15:18 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [273/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos INFO: [274/480] Analyzing https://github.com/KamiliArsyad/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/KamiliArsyad/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/KamiliArsyad/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/KamiliArsyad/ip.git (master) completed! -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [275/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/li-rongzhi/ip.git (master) completed! -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [276/480] Analyzing https://github.com/trgao/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [275/480] Analyzing https://github.com/trgao/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/trgao/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/trgao/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seraphimstreets/ip.git (master) completed! -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [277/480] Analyzing https://github.com/lilozz2/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KamiliArsyad/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/KamiliArsyad/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/KamiliArsyad/ip.git (master) completed! +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [276/480] Analyzing https://github.com/lilozz2/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lilozz2/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lilozz2/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/trgao/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/trgao/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/trgao/ip.git (master) completed! -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [278/480] Analyzing https://github.com/jean-cq/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jean-cq/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jean-cq/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [277/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lilozz2/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lilozz2/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lilozz2/ip.git (master) completed! -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [279/480] Analyzing https://github.com/yytan25/ip.git (master)... -Sep 18, 2023 1:15:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yytan25/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yytan25/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [278/480] Analyzing https://github.com/jean-cq/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seraphimstreets/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jean-cq/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jean-cq/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seraphimstreets/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seraphimstreets/ip.git (master) completed! +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [279/480] Analyzing https://github.com/jedkohjk/ip.git (master)... +Sep 18, 2023 4:31:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jedkohjk/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jedkohjk/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jean-cq/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jean-cq/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jean-cq/ip.git (master) completed! -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [280/480] Analyzing https://github.com/jedkohjk/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jedkohjk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jedkohjk/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yytan25/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yytan25/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yytan25/ip.git (master) completed! -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [281/480] Analyzing https://github.com/ryantzr1/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [280/480] Analyzing https://github.com/ryantzr1/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ryantzr1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ryantzr1/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [281/480] Analyzing https://github.com/yytan25/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yytan25/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yytan25/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ryantzr1/ip.git (master) completed! -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [282/480] Analyzing https://github.com/maypfv/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/maypfv/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/maypfv/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yytan25/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yytan25/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yytan25/ip.git (master) completed! +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [283/480] Analyzing https://github.com/JizhuoChen/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JizhuoChen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JizhuoChen/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [284/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... -Sep 18, 2023 1:15:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TohLiYuan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TohLiYuan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/maypfv/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/maypfv/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/maypfv/ip.git (master) completed! -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [285/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [284/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [285/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ChongWeiJie29/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ChongWeiJie29/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChongWeiJie29/ip.git (master) completed! -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [286/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [287/480] Analyzing https://github.com/derekjxtan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/derekjxtan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/derekjxtan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [286/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TohLiYuan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TohLiYuan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Goh-Li-Ting/ip.git (master) completed! -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [288/480] Analyzing https://github.com/kristayeo/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [287/480] Analyzing https://github.com/kristayeo/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kristayeo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kristayeo/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/derekjxtan/ip.git (master) completed! -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [289/480] Analyzing https://github.com/shashahchk/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shashahchk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shashahchk/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kristayeo/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kristayeo/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kristayeo/ip.git (master) completed! -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [288/480] Analyzing https://github.com/derekjxtan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/derekjxtan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/derekjxtan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [289/480] Analyzing https://github.com/shashahchk/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shashahchk/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shashahchk/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/derekjxtan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/derekjxtan/ip.git (master)... +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/derekjxtan/ip.git (master) completed! +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator analyzeRepos INFO: [290/480] Analyzing https://github.com/Chandan8186/ip.git (master)... -Sep 18, 2023 1:15:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chandan8186/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chandan8186/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chandan8186/ip.git (master) completed! -Sep 18, 2023 1:15:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [291/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AndrewJanong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AndrewJanong/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AndrewJanong/ip.git (master) completed! -Sep 18, 2023 1:15:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [292/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [291/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/alyssaongyx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/alyssaongyx/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shashahchk/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shashahchk/ip.git (master)... -Sep 18, 2023 1:15:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shashahchk/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [293/480] Analyzing https://github.com/Kailash201/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [292/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AndrewJanong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AndrewJanong/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shashahchk/ip.git (master) completed! -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [293/480] Analyzing https://github.com/Kailash201/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kailash201/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kailash201/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AndrewJanong/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AndrewJanong/ip.git (master)... +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AndrewJanong/ip.git (master) completed! +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepos INFO: [294/480] Analyzing https://github.com/laurenlim2112/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/laurenlim2112/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/laurenlim2112/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kailash201/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kailash201/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kailash201/ip.git (master) completed! -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator analyzeRepos INFO: [295/480] Analyzing https://github.com/lambraydon/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lambraydon/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lambraydon/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/laurenlim2112/ip.git (master) completed! -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [296/480] Analyzing https://github.com/sk2001git/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sk2001git/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sk2001git/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lambraydon/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lambraydon/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lambraydon/ip.git (master) completed! -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [297/480] Analyzing https://github.com/lshaoqin/ip.git (master)... -Sep 18, 2023 1:15:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lshaoqin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lshaoqin/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sk2001git/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lshaoqin/ip.git (master)... +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lshaoqin/ip.git (master)... +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sk2001git/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sk2001git/ip.git (master) completed! -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lshaoqin/ip.git (master) completed! +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [298/480] Analyzing https://github.com/chonguschonguschongus/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [299/480] Analyzing https://github.com/peasantbird/ip.git (master)... +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/chonguschonguschongus/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/chonguschonguschongus/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lshaoqin/ip.git (master) completed! -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [299/480] Analyzing https://github.com/peasantbird/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! +Sep 18, 2023 4:31:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chonguschonguschongus/ip.git (master) completed! -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [300/480] Analyzing https://github.com/WangCheng0116/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [301/480] Analyzing https://github.com/chewjh1234/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WangCheng0116/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WangCheng0116/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [301/480] Analyzing https://github.com/chewjh1234/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WangCheng0116/ip.git (master) completed! -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [302/480] Analyzing https://github.com/elaineshijie/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chewjh1234/ip.git (master) completed! -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [303/480] Analyzing https://github.com/lynnlow175/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... -Sep 18, 2023 1:15:24 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [302/480] Analyzing https://github.com/lynnlow175/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lynnlow175/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lynnlow175/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WangCheng0116/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WangCheng0116/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WangCheng0116/ip.git (master) completed! +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [303/480] Analyzing https://github.com/elaineshijie/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lynnlow175/ip.git (master) completed! -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepos INFO: [304/480] Analyzing https://github.com/lordidiot/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lordidiot/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lordidiot/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/elaineshijie/ip.git (master) completed! -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [305/480] Analyzing https://github.com/teozhengyang/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [305/480] Analyzing https://github.com/chew01/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lordidiot/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lordidiot/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lordidiot/ip.git (master) completed! -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [306/480] Analyzing https://github.com/chew01/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [306/480] Analyzing https://github.com/RSXIX/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chew01/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chew01/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chew01/ip.git (master) completed! -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [307/480] Analyzing https://github.com/RSXIX/ip.git (master)... -Sep 18, 2023 1:15:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [307/480] Analyzing https://github.com/juliusgambe/ip.git (master)... +Sep 18, 2023 4:31:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/juliusgambe/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/juliusgambe/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/RSXIX/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/RSXIX/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/RSXIX/ip.git (master) completed! -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [308/480] Analyzing https://github.com/juliusgambe/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/juliusgambe/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/juliusgambe/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/teozhengyang/ip.git (master) completed! -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [309/480] Analyzing https://github.com/zhonghan721/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhonghan721/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhonghan721/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [308/480] Analyzing https://github.com/teozhengyang/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/juliusgambe/ip.git (master) completed! -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [310/480] Analyzing https://github.com/WZWren/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [309/480] Analyzing https://github.com/zhonghan721/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhonghan721/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhonghan721/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zhonghan721/ip.git (master) completed! -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [311/480] Analyzing https://github.com/wasjoe1/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [310/480] Analyzing https://github.com/inezkok/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/teozhengyang/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! +Sep 18, 2023 4:31:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [311/480] Analyzing https://github.com/WZWren/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/teozhengyang/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/teozhengyang/ip.git (master) completed! +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [312/480] Analyzing https://github.com/wasjoe1/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wasjoe1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wasjoe1/ip.git (master)... -Sep 18, 2023 1:15:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WZWren/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WZWren/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WZWren/ip.git (master) completed! -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [312/480] Analyzing https://github.com/inezkok/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wasjoe1/ip.git (master) completed! -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [313/480] Analyzing https://github.com/kokrui/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wasjoe1/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kokrui/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kokrui/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wasjoe1/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wasjoe1/ip.git (master) completed! +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [314/480] Analyzing https://github.com/jinyang628/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jinyang628/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jinyang628/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kokrui/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kokrui/ip.git (master) completed! -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [315/480] Analyzing https://github.com/nananakx-x/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nananakx-x/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nananakx-x/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyang628/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyang628/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyang628/ip.git (master) completed! -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [316/480] Analyzing https://github.com/AnnabelTing/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AnnabelTing/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AnnabelTing/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nananakx-x/ip.git (master) completed! -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [317/480] Analyzing https://github.com/timetraveller-123/ip.git (master)... -Sep 18, 2023 1:15:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/timetraveller-123/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/timetraveller-123/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AnnabelTing/ip.git (master) completed! -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [318/480] Analyzing https://github.com/ylyma/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [319/480] Analyzing https://github.com/LicongHuang/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ylyma/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ylyma/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [318/480] Analyzing https://github.com/LicongHuang/ip.git (master)... +Sep 18, 2023 4:31:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LicongHuang/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LicongHuang/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [319/480] Analyzing https://github.com/Jweng88/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LicongHuang/ip.git (master) completed! -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [320/480] Analyzing https://github.com/Jweng88/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [320/480] Analyzing https://github.com/jovkusuma/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Jweng88/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Jweng88/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jweng88/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Jweng88/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Jweng88/ip.git (master) completed! -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [321/480] Analyzing https://github.com/EricXiong420/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ylyma/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ylyma/ip.git (master)... -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ylyma/ip.git (master) completed! -Sep 18, 2023 1:15:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [322/480] Analyzing https://github.com/jovkusuma/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jovkusuma/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jovkusuma/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jovkusuma/ip.git (master) completed! -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [323/480] Analyzing https://github.com/bhnuka/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [321/480] Analyzing https://github.com/ylyma/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jweng88/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Jweng88/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Jweng88/ip.git (master) completed! +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [322/480] Analyzing https://github.com/EricXiong420/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ylyma/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ylyma/ip.git (master)... +Sep 18, 2023 4:31:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ylyma/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/EricXiong420/ip.git (master) completed! -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [323/480] Analyzing https://github.com/bhnuka/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ylyma/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ylyma/ip.git (master) completed! +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [324/480] Analyzing https://github.com/J-hta-n/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/J-hta-n/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/J-hta-n/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/bhnuka/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/J-hta-n/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/bhnuka/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/bhnuka/ip.git (master) completed! -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [325/480] Analyzing https://github.com/Tim-Siu/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Tim-Siu/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Tim-Siu/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/J-hta-n/ip.git (master) completed! -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [326/480] Analyzing https://github.com/yarnmengnus/ip.git (master)... -Sep 18, 2023 1:15:29 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Tim-Siu/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Tim-Siu/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yarnmengnus/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yarnmengnus/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Tim-Siu/ip.git (master) completed! -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [327/480] Analyzing https://github.com/sopa301/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yarnmengnus/ip.git (master) completed! -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [328/480] Analyzing https://github.com/ngeeyonglim/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [327/480] Analyzing https://github.com/sopa301/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Tim-Siu/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sopa301/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sopa301/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Tim-Siu/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Tim-Siu/ip.git (master) completed! +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [328/480] Analyzing https://github.com/ngeeyonglim/ip.git (master)... +Sep 18, 2023 4:31:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ngeeyonglim/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ngeeyonglim/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sopa301/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ngeeyonglim/ip.git (master) completed! -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sopa301/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [329/480] Analyzing https://github.com/flexibo/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ngeeyonglim/ip.git (master)... +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sopa301/ip.git (master) completed! -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [330/480] Analyzing https://github.com/ItsTYtan/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [329/480] Analyzing https://github.com/flexibo/ip.git (master)... +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/flexibo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/flexibo/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ngeeyonglim/ip.git (master)... +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ngeeyonglim/ip.git (master) completed! +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [330/480] Analyzing https://github.com/ItsTYtan/ip.git (master)... +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ItsTYtan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ItsTYtan/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/flexibo/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [331/480] Analyzing https://github.com/javinchua/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/flexibo/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/flexibo/ip.git (master) completed! -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [332/480] Analyzing https://github.com/amosting/ip.git (master)... +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [332/480] Analyzing https://github.com/amosting/ip.git (master)... -Sep 18, 2023 1:15:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/amosting/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/amosting/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/amosting/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/amosting/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/amosting/ip.git (master) completed! -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [333/480] Analyzing https://github.com/Cleon2/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Cleon2/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Cleon2/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/javinchua/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/javinchua/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/javinchua/ip.git (master) completed! -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [334/480] Analyzing https://github.com/ketweeen/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ketweeen/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ketweeen/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [335/480] Analyzing https://github.com/wui-hong/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [335/480] Analyzing https://github.com/sudarshan2401/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ketweeen/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ketweeen/ip.git (master) completed! -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [336/480] Analyzing https://github.com/sudarshan2401/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sudarshan2401/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sudarshan2401/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [336/480] Analyzing https://github.com/wui-hong/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wui-hong/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wui-hong/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wui-hong/ip.git (master) completed! -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepos INFO: [337/480] Analyzing https://github.com/Respirayson/ip.git (master)... -Sep 18, 2023 1:15:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Respirayson/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Respirayson/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sudarshan2401/ip.git (master) completed! -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [338/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Respirayson/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Respirayson/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Respirayson/ip.git (master) completed! -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [339/480] Analyzing https://github.com/sunzihan23/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [338/480] Analyzing https://github.com/sunzihan23/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sunzihan23/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sunzihan23/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shishirbychapur/ip.git (master) completed! -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [340/480] Analyzing https://github.com/Chrainx/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Respirayson/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sunzihan23/ip.git (master) completed! -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [341/480] Analyzing https://github.com/wj331/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chrainx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chrainx/ip.git (master)... -Sep 18, 2023 1:15:32 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [339/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Respirayson/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Respirayson/ip.git (master) completed! +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [340/480] Analyzing https://github.com/wj331/ip.git (master)... +Sep 18, 2023 4:31:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wj331/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wj331/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wj331/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wj331/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wj331/ip.git (master) completed! -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [342/480] Analyzing https://github.com/licongshen12/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chrainx/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chrainx/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chrainx/ip.git (master) completed! -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [341/480] Analyzing https://github.com/Chrainx/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shishirbychapur/ip.git (master) completed! +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [342/480] Analyzing https://github.com/mamayuan/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mamayuan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mamayuan/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chrainx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chrainx/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepos INFO: [343/480] Analyzing https://github.com/tjch-o/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tjch-o/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tjch-o/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/licongshen12/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/licongshen12/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/licongshen12/ip.git (master) completed! -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [344/480] Analyzing https://github.com/mamayuan/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mamayuan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mamayuan/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chrainx/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chrainx/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chrainx/ip.git (master) completed! +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [344/480] Analyzing https://github.com/licongshen12/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator analyzeRepos INFO: [345/480] Analyzing https://github.com/ong-wei-hong/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ong-wei-hong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ong-wei-hong/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! -Sep 18, 2023 1:15:33 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/licongshen12/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/licongshen12/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/licongshen12/ip.git (master) completed! +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [346/480] Analyzing https://github.com/tanboonkhong/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanboonkhong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanboonkhong/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanboonkhong/ip.git (master) completed! -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [347/480] Analyzing https://github.com/cbj252/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cbj252/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cbj252/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ong-wei-hong/ip.git (master) completed! -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [347/480] Analyzing https://github.com/cbj252/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cbj252/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cbj252/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanboonkhong/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanboonkhong/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanboonkhong/ip.git (master) completed! +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [348/480] Analyzing https://github.com/AlfredBeNoel/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlfredBeNoel/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlfredBeNoel/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cbj252/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cbj252/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cbj252/ip.git (master) completed! -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [349/480] Analyzing https://github.com/keaganpzh/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/keaganpzh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/keaganpzh/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlfredBeNoel/ip.git (master) completed! -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [350/480] Analyzing https://github.com/ElginTZM/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ElginTZM/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ElginTZM/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ElginTZM/ip.git (master) completed! -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [351/480] Analyzing https://github.com/LimJH2002/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 18, 2023 1:15:34 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LimJH2002/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LimJH2002/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... +Sep 18, 2023 4:31:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/keaganpzh/ip.git (master) completed! -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [352/480] Analyzing https://github.com/cmHuang777/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cmHuang777/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cmHuang777/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LimJH2002/ip.git (master) completed! -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [353/480] Analyzing https://github.com/WeeeHung/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WeeeHung/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WeeeHung/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [353/480] Analyzing https://github.com/xxiaoweii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xxiaoweii/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xxiaoweii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cmHuang777/ip.git (master) completed! -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [354/480] Analyzing https://github.com/rayyan35p/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rayyan35p/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rayyan35p/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [354/480] Analyzing https://github.com/WeeeHung/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WeeeHung/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WeeeHung/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WeeeHung/ip.git (master) completed! -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [355/480] Analyzing https://github.com/xxiaoweii/ip.git (master)... -Sep 18, 2023 1:15:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xxiaoweii/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xxiaoweii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [355/480] Analyzing https://github.com/rayyan35p/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xxiaoweii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rayyan35p/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rayyan35p/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xxiaoweii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [356/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rayyan35p/ip.git (master) completed! -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [356/480] Analyzing https://github.com/dhruvir29/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LinWanLeii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [357/480] Analyzing https://github.com/dhruvir29/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LinWanLeii/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dhruvir29/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dhruvir29/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [357/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LinWanLeii/ip.git (master) completed! +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [358/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... +Sep 18, 2023 4:31:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Song-Mengfei/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Song-Mengfei/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Song-Mengfei/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dhruvir29/ip.git (master) completed! -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [358/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [359/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Song-Mengfei/ip.git (master) completed! -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [359/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [360/480] Analyzing https://github.com/tiif/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jinyuan0425/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jinyuan0425/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LinWanLeii/ip.git (master) completed! -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [360/480] Analyzing https://github.com/tiif/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tiif/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tiif/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiif/ip.git (master) completed! +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [361/480] Analyzing https://github.com/nicholascher/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicholascher/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicholascher/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyuan0425/ip.git (master) completed! -Sep 18, 2023 1:15:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [361/480] Analyzing https://github.com/hcs1203/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [362/480] Analyzing https://github.com/hcs1203/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/hcs1203/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/hcs1203/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/hcs1203/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/hcs1203/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/hcs1203/ip.git (master) completed! -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [362/480] Analyzing https://github.com/nicholascher/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiif/ip.git (master) completed! -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos INFO: [363/480] Analyzing https://github.com/papataco14/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicholascher/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicholascher/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/papataco14/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/papataco14/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [364/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicholascher/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicholascher/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicholascher/ip.git (master) completed! -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [365/480] Analyzing https://github.com/NereusWB922/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/NereusWB922/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/NereusWB922/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [364/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [365/480] Analyzing https://github.com/KamJiaYue/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/KamJiaYue/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/KamJiaYue/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PohSayKeong/ip.git (master) completed! -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [366/480] Analyzing https://github.com/ivyy-poison/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [366/480] Analyzing https://github.com/NereusWB922/ip.git (master)... +Sep 18, 2023 4:31:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/NereusWB922/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/NereusWB922/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KamJiaYue/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/NereusWB922/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/KamJiaYue/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/KamJiaYue/ip.git (master) completed! +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [367/480] Analyzing https://github.com/ivyy-poison/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ivyy-poison/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ivyy-poison/ip.git (master)... -Sep 18, 2023 1:15:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ivyy-poison/ip.git (master) completed! -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [367/480] Analyzing https://github.com/KamJiaYue/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/KamJiaYue/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/KamJiaYue/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/NereusWB922/ip.git (master) completed! -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepos INFO: [368/480] Analyzing https://github.com/jacobcuison/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jacobcuison/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jacobcuison/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jacobcuison/ip.git (master) completed! -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ivyy-poison/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ivyy-poison/ip.git (master) completed! +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepos INFO: [369/480] Analyzing https://github.com/rocketninja7/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rocketninja7/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rocketninja7/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/KamJiaYue/ip.git (master) completed! -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jacobcuison/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jacobcuison/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jacobcuison/ip.git (master) completed! +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepos INFO: [370/480] Analyzing https://github.com/ji-just-ji/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ji-just-ji/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ji-just-ji/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rocketninja7/ip.git (master) completed! -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [371/480] Analyzing https://github.com/kohkaijie/ip.git (master)... -Sep 18, 2023 1:15:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kohkaijie/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kohkaijie/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [371/480] Analyzing https://github.com/zekone/ip.git (master)... +Sep 18, 2023 4:31:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zekone/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zekone/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [372/480] Analyzing https://github.com/markgcera/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [372/480] Analyzing https://github.com/kohkaijie/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kohkaijie/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kohkaijie/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zekone/ip.git (master) completed! +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [373/480] Analyzing https://github.com/markgcera/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/markgcera/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/markgcera/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [373/480] Analyzing https://github.com/zekone/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zekone/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zekone/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/markgcera/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/markgcera/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepos INFO: [374/480] Analyzing https://github.com/PearlynnT/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/PearlynnT/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/PearlynnT/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zekone/ip.git (master) completed! -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [375/480] Analyzing https://github.com/StevenLiudw/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/StevenLiudw/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/StevenLiudw/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [375/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PearlynnT/ip.git (master) completed! -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [376/480] Analyzing https://github.com/mounilsankar/ip.git (master)... -Sep 18, 2023 1:15:39 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [376/480] Analyzing https://github.com/StevenLiudw/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/StevenLiudw/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/StevenLiudw/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [377/480] Analyzing https://github.com/dloh2236/ip.git (master)... +Sep 18, 2023 4:31:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dloh2236/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/StevenLiudw/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dloh2236/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dloh2236/ip.git (master) completed! +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [378/480] Analyzing https://github.com/mounilsankar/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mounilsankar/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mounilsankar/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/StevenLiudw/ip.git (master) completed! -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [377/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [379/480] Analyzing https://github.com/junnengsoo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [380/480] Analyzing https://github.com/zannloo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mounilsankar/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mounilsankar/ip.git (master) completed! -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [378/480] Analyzing https://github.com/dloh2236/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [379/480] Analyzing https://github.com/zannloo/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zannloo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zannloo/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dloh2236/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dloh2236/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dloh2236/ip.git (master) completed! -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [380/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mounilsankar/ip.git (master) completed! +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [381/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/freshcabbage123/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/freshcabbage123/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zannloo/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zannloo/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zannloo/ip.git (master) completed! -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [381/480] Analyzing https://github.com/junnengsoo/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 18, 2023 1:15:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zannloo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/freshcabbage123/ip.git (master) completed! -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos INFO: [382/480] Analyzing https://github.com/Kokseng1/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zannloo/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zannloo/ip.git (master) completed! +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [383/480] Analyzing https://github.com/alientian/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kokseng1/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kokseng1/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [383/480] Analyzing https://github.com/itsNatTan/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alientian/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alientian/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kokseng1/ip.git (master) completed! +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [384/480] Analyzing https://github.com/tjingsheng/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tjingsheng/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tjingsheng/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alientian/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alientian/ip.git (master) completed! +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [385/480] Analyzing https://github.com/itsNatTan/ip.git (master)... +Sep 18, 2023 4:31:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/itsNatTan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/itsNatTan/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kokseng1/ip.git (master) completed! -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [384/480] Analyzing https://github.com/frrrrry/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/itsNatTan/ip.git (master) completed! -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [385/480] Analyzing https://github.com/ZD292/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [386/480] Analyzing https://github.com/ZD292/ip.git (master)... +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ZD292/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ZD292/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/frrrrry/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/frrrrry/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/frrrrry/ip.git (master) completed! -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [386/480] Analyzing https://github.com/alientian/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alientian/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alientian/ip.git (master)... -Sep 18, 2023 1:15:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tjingsheng/ip.git (master)... +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tjingsheng/ip.git (master)... +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ZD292/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tjingsheng/ip.git (master) completed! +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [387/480] Analyzing https://github.com/frrrrry/ip.git (master)... +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ZD292/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ZD292/ip.git (master) completed! -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [387/480] Analyzing https://github.com/tjingsheng/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alientian/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alientian/ip.git (master) completed! -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator analyzeRepos INFO: [388/480] Analyzing https://github.com/MagnificentCreature/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tjingsheng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tjingsheng/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... +Sep 18, 2023 4:31:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/MagnificentCreature/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/MagnificentCreature/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/frrrrry/ip.git (master)... +Sep 18, 2023 4:31:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/frrrrry/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/frrrrry/ip.git (master) completed! +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [389/480] Analyzing https://github.com/wanghejin/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/MagnificentCreature/ip.git (master) completed! -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [389/480] Analyzing https://github.com/andrefoo/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tjingsheng/ip.git (master) completed! -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [390/480] Analyzing https://github.com/wanghejin/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [390/480] Analyzing https://github.com/andrefoo/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wanghejin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wanghejin/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [391/480] Analyzing https://github.com/tohpinren/ip.git (master)... -Sep 18, 2023 1:15:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wanghejin/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wanghejin/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wanghejin/ip.git (master) completed! -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [391/480] Analyzing https://github.com/tohpinren/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos INFO: [392/480] Analyzing https://github.com/XihuaZ/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/XihuaZ/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/XihuaZ/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tohpinren/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tohpinren/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tohpinren/ip.git (master) completed! -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos INFO: [393/480] Analyzing https://github.com/xavierpok/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xavierpok/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xavierpok/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/XihuaZ/ip.git (master) completed! -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [394/480] Analyzing https://github.com/SungMatt/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SungMatt/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SungMatt/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xavierpok/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xavierpok/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xavierpok/ip.git (master) completed! -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [395/480] Analyzing https://github.com/bkjwjason/ip.git (master)... -Sep 18, 2023 1:15:43 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [394/480] Analyzing https://github.com/bkjwjason/ip.git (master)... +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/bkjwjason/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/bkjwjason/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/bkjwjason/ip.git (master) completed! -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [396/480] Analyzing https://github.com/Choonyan02/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [397/480] Analyzing https://github.com/aarontxz/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [395/480] Analyzing https://github.com/SungMatt/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SungMatt/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SungMatt/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xavierpok/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xavierpok/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xavierpok/ip.git (master) completed! +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [396/480] Analyzing https://github.com/aarontxz/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/aarontxz/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/aarontxz/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aarontxz/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aarontxz/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aarontxz/ip.git (master) completed! -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [397/480] Analyzing https://github.com/Choonyan02/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [398/480] Analyzing https://github.com/jianyangg/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jianyangg/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jianyangg/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [399/480] Analyzing https://github.com/tayian/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tayian/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tayian/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [400/480] Analyzing https://github.com/wnchan/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wnchan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wnchan/ip.git (master)... +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tayian/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tayian/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tayian/ip.git (master) completed! -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [400/480] Analyzing https://github.com/wnchan/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [401/480] Analyzing https://github.com/Jweewee/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wnchan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wnchan/ip.git (master)... -Sep 18, 2023 1:15:44 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Jweewee/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Jweewee/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Jweewee/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Jweewee/ip.git (master) completed! -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [402/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wnchan/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cyaoxuan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cyaoxuan/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wnchan/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wnchan/ip.git (master) completed! -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [402/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cyaoxuan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cyaoxuan/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Jweewee/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Jweewee/ip.git (master) completed! +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [403/480] Analyzing https://github.com/anthonytamzil/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/anthonytamzil/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/anthonytamzil/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cyaoxuan/ip.git (master) completed! -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [404/480] Analyzing https://github.com/CelestineTan03/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/CelestineTan03/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/CelestineTan03/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/CelestineTan03/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/anthonytamzil/ip.git (master) completed! -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [405/480] Analyzing https://github.com/saltedfishxx/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/CelestineTan03/ip.git (master) completed! -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [406/480] Analyzing https://github.com/AlagappanRa/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlagappanRa/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlagappanRa/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! -Sep 18, 2023 1:15:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [407/480] Analyzing https://github.com/euchangxian/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlagappanRa/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [407/480] Analyzing https://github.com/felibunnyy/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [408/480] Analyzing https://github.com/Ken-Lai/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Ken-Lai/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [409/480] Analyzing https://github.com/felibunnyy/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/felibunnyy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/felibunnyy/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [410/480] Analyzing https://github.com/itssisi/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/felibunnyy/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [411/480] Analyzing https://github.com/jamz903/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [409/480] Analyzing https://github.com/euchangxian/ip.git (master)... +Sep 18, 2023 4:31:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Ken-Lai/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Ken-Lai/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Ken-Lai/ip.git (master) completed! +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [410/480] Analyzing https://github.com/jamz903/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/itssisi/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/itssisi/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [412/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jamz903/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jamz903/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jamz903/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [411/480] Analyzing https://github.com/itssisi/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [412/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/itssisi/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/itssisi/ip.git (master) completed! +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos INFO: [413/480] Analyzing https://github.com/Propene-Dan/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Propene-Dan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Propene-Dan/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kevin-Liusx/ip.git (master) completed! -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos INFO: [414/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... -Sep 18, 2023 1:15:46 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Propene-Dan/ip.git (master) completed! -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [415/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kenvynKwek/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kenvynKwek/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [415/480] Analyzing https://github.com/prawnzyy/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChuanXinNg/ip.git (master) completed! -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [416/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [416/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kenvynKwek/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kenvynKwek/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/prawnzyy/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/prawnzyy/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/prawnzyy/ip.git (master) completed! +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [417/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Ruizhi2001/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Ruizhi2001/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kenvynKwek/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kenvynKwek/ip.git (master) completed! -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [417/480] Analyzing https://github.com/prawnzyy/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Ruizhi2001/ip.git (master) completed! -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [418/480] Analyzing https://github.com/saraozn/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/saraozn/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/saraozn/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/prawnzyy/ip.git (master) completed! -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Ruizhi2001/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Ruizhi2001/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Ruizhi2001/ip.git (master) completed! +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [419/480] Analyzing https://github.com/nicholastng010601/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicholastng010601/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicholastng010601/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/saraozn/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/saraozn/ip.git (master)... -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/saraozn/ip.git (master) completed! -Sep 18, 2023 1:15:47 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [420/480] Analyzing https://github.com/DistractedCat/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/DistractedCat/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/DistractedCat/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicholastng010601/ip.git (master) completed! -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [421/480] Analyzing https://github.com/yezkez10/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yezkez10/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yezkez10/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/DistractedCat/ip.git (master) completed! -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [422/480] Analyzing https://github.com/revdrag/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/revdrag/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/revdrag/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yezkez10/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yezkez10/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yezkez10/ip.git (master) completed! -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [423/480] Analyzing https://github.com/alvinlim277/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/revdrag/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/revdrag/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/revdrag/ip.git (master) completed! -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [424/480] Analyzing https://github.com/JasonRay168/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JasonRay168/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JasonRay168/ip.git (master)... -Sep 18, 2023 1:15:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [425/480] Analyzing https://github.com/billieboy7/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/billieboy7/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/billieboy7/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonRay168/ip.git (master) completed! -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [426/480] Analyzing https://github.com/jannnice/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jannnice/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jannnice/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/billieboy7/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/billieboy7/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/billieboy7/ip.git (master) completed! -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [427/480] Analyzing https://github.com/samuelim01/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/samuelim01/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/samuelim01/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jannnice/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jannnice/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jannnice/ip.git (master) completed! -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [428/480] Analyzing https://github.com/evanyan13/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/samuelim01/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/samuelim01/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/samuelim01/ip.git (master) completed! -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [429/480] Analyzing https://github.com/dinde2004/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dinde2004/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dinde2004/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [430/480] Analyzing https://github.com/seanpzk/ip.git (master)... -Sep 18, 2023 1:15:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/seanpzk/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/seanpzk/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dinde2004/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dinde2004/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dinde2004/ip.git (master) completed! -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [431/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [431/480] Analyzing https://github.com/lsyurea/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lsyurea/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lsyurea/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seanpzk/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seanpzk/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seanpzk/ip.git (master) completed! -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [432/480] Analyzing https://github.com/lsyurea/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lsyurea/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lsyurea/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/KumChaiYin/ip.git (master) completed! -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [433/480] Analyzing https://github.com/Sasmik23/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sasmik23/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sasmik23/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [432/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lsyurea/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lsyurea/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lsyurea/ip.git (master) completed! -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [434/480] Analyzing https://github.com/geraldngjx/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [433/480] Analyzing https://github.com/Sasmik23/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sasmik23/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sasmik23/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sasmik23/ip.git (master) completed! -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [435/480] Analyzing https://github.com/garylow2001/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... -Sep 18, 2023 1:15:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [434/480] Analyzing https://github.com/geraldngjx/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/KumChaiYin/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/KumChaiYin/ip.git (master) completed! +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [435/480] Analyzing https://github.com/leontan2/ip.git (master)... +Sep 18, 2023 4:31:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/geraldngjx/ip.git (master) completed! -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [436/480] Analyzing https://github.com/leontan2/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/garylow2001/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/garylow2001/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/garylow2001/ip.git (master) completed! -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [437/480] Analyzing https://github.com/lululwtv/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lululwtv/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lululwtv/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [436/480] Analyzing https://github.com/garylow2001/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/leontan2/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/leontan2/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/leontan2/ip.git (master) completed! -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [438/480] Analyzing https://github.com/wamps-jp/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [437/480] Analyzing https://github.com/wamps-jp/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wamps-jp/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wamps-jp/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wamps-jp/ip.git (master) completed! -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [438/480] Analyzing https://github.com/lululwtv/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lululwtv/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lululwtv/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/garylow2001/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/garylow2001/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/garylow2001/ip.git (master) completed! +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [439/480] Analyzing https://github.com/dickongwd/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dickongwd/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dickongwd/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lululwtv/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lululwtv/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lululwtv/ip.git (master) completed! -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [440/480] Analyzing https://github.com/jacksonyuan256/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jacksonyuan256/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jacksonyuan256/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dickongwd/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dickongwd/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dickongwd/ip.git (master) completed! -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [440/480] Analyzing https://github.com/jacksonyuan256/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jacksonyuan256/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jacksonyuan256/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lululwtv/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lululwtv/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lululwtv/ip.git (master) completed! +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [441/480] Analyzing https://github.com/wr1159/ip.git (master)... -Sep 18, 2023 1:15:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wr1159/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wr1159/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jacksonyuan256/ip.git (master) completed! -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [442/480] Analyzing https://github.com/suryanshkushwaha/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [442/480] Analyzing https://github.com/Nauxe/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wr1159/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wr1159/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wr1159/ip.git (master) completed! -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [443/480] Analyzing https://github.com/Nauxe/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [443/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nauxe/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nauxe/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nauxe/ip.git (master) completed! -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [444/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [444/480] Analyzing https://github.com/suryanshkushwaha/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yyyaohhh/ip.git (master) completed! -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [445/480] Analyzing https://github.com/zhanyang01/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [445/480] Analyzing https://github.com/czhiruo/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/czhiruo/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/czhiruo/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/czhiruo/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/czhiruo/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/czhiruo/ip.git (master) completed! +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [446/480] Analyzing https://github.com/zhanyang01/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zhanyang01/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zhanyang01/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/suryanshkushwaha/ip.git (master) completed! -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [446/480] Analyzing https://github.com/czhiruo/ip.git (master)... -Sep 18, 2023 1:15:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/czhiruo/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/czhiruo/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [447/480] Analyzing https://github.com/victorpengmx/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/czhiruo/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/czhiruo/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/czhiruo/ip.git (master) completed! -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [448/480] Analyzing https://github.com/longnguyentan/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [447/480] Analyzing https://github.com/longnguyentan/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/longnguyentan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/longnguyentan/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/longnguyentan/ip.git (master) completed! -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [450/480] Analyzing https://github.com/Eola-Z/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [448/480] Analyzing https://github.com/Eola-Z/ip.git (master)... +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Eola-Z/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Eola-Z/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Eola-Z/ip.git (master) completed! -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [451/480] Analyzing https://github.com/jibtaf/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/longnguyentan/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/longnguyentan/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/longnguyentan/ip.git (master) completed! +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [450/480] Analyzing https://github.com/victorpengmx/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Cikguseven/ip.git (master) completed! -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [452/480] Analyzing https://github.com/lipwei1808/ip.git (master)... -Sep 18, 2023 1:15:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lipwei1808/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lipwei1808/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jibtaf/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jibtaf/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jibtaf/ip.git (master) completed! -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [453/480] Analyzing https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [451/480] Analyzing https://github.com/Mohammed-Faizzzz/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [452/480] Analyzing https://github.com/jibtaf/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Mohammed-Faizzzz/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [454/480] Analyzing https://github.com/dylkaw/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dylkaw/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dylkaw/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Mohammed-Faizzzz/ip.git (master) completed! -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [455/480] Analyzing https://github.com/nikele2001/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nikele2001/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nikele2001/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [453/480] Analyzing https://github.com/dylkaw/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jibtaf/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dylkaw/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dylkaw/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jibtaf/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jibtaf/ip.git (master) completed! +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [454/480] Analyzing https://github.com/lipwei1808/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lipwei1808/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lipwei1808/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dylkaw/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dylkaw/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dylkaw/ip.git (master) completed! -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [455/480] Analyzing https://github.com/nikele2001/ip.git (master)... +Sep 18, 2023 4:31:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nikele2001/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nikele2001/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos INFO: [456/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/DeltonCheng/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/DeltonCheng/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [457/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nikele2001/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nikele2001/ip.git (master) completed! -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [458/480] Analyzing https://github.com/iantsaii/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [457/480] Analyzing https://github.com/craigtonlian/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DeltonCheng/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/DeltonCheng/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [458/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ChangruHenryQian/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ChangruHenryQian/ip.git (master)... -Sep 18, 2023 1:15:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChangruHenryQian/ip.git (master) completed! -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [459/480] Analyzing https://github.com/craigtonlian/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [460/480] Analyzing https://github.com/ruo-x/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruo-x/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruo-x/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [459/480] Analyzing https://github.com/iantsaii/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [461/480] Analyzing https://github.com/wjacobw/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [460/480] Analyzing https://github.com/wjacobw/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wjacobw/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wjacobw/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruo-x/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wjacobw/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruo-x/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruo-x/ip.git (master) completed! -Sep 18, 2023 1:15:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [462/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... -Sep 18, 2023 1:15:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wjacobw/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wjacobw/ip.git (master) completed! -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [463/480] Analyzing https://github.com/brein62/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [461/480] Analyzing https://github.com/ruo-x/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [462/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/angkyakdifp/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/angkyakdifp/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruo-x/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruo-x/ip.git (master)... +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/angkyakdifp/ip.git (master) completed! -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [463/480] Analyzing https://github.com/brein62/ip.git (master)... +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruo-x/ip.git (master)... +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruo-x/ip.git (master)... +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruo-x/ip.git (master) completed! +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [464/480] Analyzing https://github.com/nicrandomlee/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicrandomlee/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicrandomlee/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/brein62/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/brein62/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/brein62/ip.git (master) completed! -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [465/480] Analyzing https://github.com/Bryan-Goh/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicrandomlee/ip.git (master) completed! -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [466/480] Analyzing https://github.com/kiatkat/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kiatkat/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kiatkat/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bryan-Goh/ip.git (master) completed! -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [467/480] Analyzing https://github.com/MadLamprey/ip.git (master)... -Sep 18, 2023 1:15:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/MadLamprey/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/MadLamprey/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kiatkat/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kiatkat/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kiatkat/ip.git (master) completed! -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [468/480] Analyzing https://github.com/xyT-T/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xyT-T/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xyT-T/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [468/480] Analyzing https://github.com/jiakai-17/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jiakai-17/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jiakai-17/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/MadLamprey/ip.git (master) completed! -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [469/480] Analyzing https://github.com/jiakai-17/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jiakai-17/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jiakai-17/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xyT-T/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xyT-T/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xyT-T/ip.git (master) completed! -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [470/480] Analyzing https://github.com/nreHieW/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nreHieW/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nreHieW/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [469/480] Analyzing https://github.com/xyT-T/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xyT-T/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xyT-T/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jiakai-17/ip.git (master) completed! -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [470/480] Analyzing https://github.com/nreHieW/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nreHieW/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nreHieW/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xyT-T/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xyT-T/ip.git (master)... +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xyT-T/ip.git (master) completed! +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [471/480] Analyzing https://github.com/nathanielcalimag/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nathanielcalimag/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nathanielcalimag/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nreHieW/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nreHieW/ip.git (master)... -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nreHieW/ip.git (master) completed! -Sep 18, 2023 1:15:57 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [472/480] Analyzing https://github.com/Saezenn/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Saezenn/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Saezenn/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nathanielcalimag/ip.git (master) completed! -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [473/480] Analyzing https://github.com/jellywaiyan/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jellywaiyan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jellywaiyan/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Saezenn/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Saezenn/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Saezenn/ip.git (master) completed! -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepos +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [474/480] Analyzing https://github.com/marquestye/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/marquestye/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/marquestye/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jellywaiyan/ip.git (master) completed! -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [475/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [475/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Tang-Moyan/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Tang-Moyan/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marquestye/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marquestye/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marquestye/ip.git (master) completed! -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [476/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Tang-Moyan/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Tang-Moyan/ip.git (master)... -Sep 18, 2023 1:15:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [476/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [477/480] Analyzing https://github.com/Sebtey/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Tang-Moyan/ip.git (master) completed! -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [478/480] Analyzing https://github.com/rionshocker/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [477/480] Analyzing https://github.com/rionshocker/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Sebtey/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [478/480] Analyzing https://github.com/Sebtey/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rionshocker/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Sebtey/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Sebtey/ip.git (master) completed! -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [479/480] Analyzing https://github.com/tyouwei/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rionshocker/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rionshocker/ip.git (master) completed! -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [479/480] Analyzing https://github.com/tyouwei/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tyouwei/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tyouwei/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator updateRepoConfig +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Sebtey/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Sebtey/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Sebtey/ip.git (master) completed! +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... +Sep 18, 2023 4:31:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Blizzeracz/ip.git (master) does not contain a standalone config file. -Sep 18, 2023 1:15:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 18, 2023 4:31:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Blizzeracz/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Blizzeracz/ip.git (master) completed! -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 18, 2023 4:31:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tyouwei/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 18, 2023 4:31:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tyouwei/ip.git (master)... -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 18, 2023 4:31:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tyouwei/ip.git (master) completed! -Sep 18, 2023 1:15:59 AM reposense.report.ReportGenerator generateReposReport +Sep 18, 2023 4:31:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Blizzeracz/ip.git (master)... +Sep 18, 2023 4:31:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Blizzeracz/ip.git (master)... +Sep 18, 2023 4:31:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Blizzeracz/ip.git (master) completed! +Sep 18, 2023 4:31:51 AM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/ip-dashboard/ip-dashboard/reposense-report -Sep 18, 2023 1:16:01 AM reposense.RepoSense main -INFO: Elapsed processing time: 2 minute(s) 24.34 second(s) +Sep 18, 2023 4:31:52 AM reposense.RepoSense main +INFO: Elapsed processing time: 2 minute(s) 1.03 second(s) diff --git a/richiehx_ip_master/authorship.json b/richiehx_ip_master/authorship.json index 7d5c7767..87ee73ff 100644 --- a/richiehx_ip_master/authorship.json +++ b/richiehx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":{"richiehx":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":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-07"},{"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":"richiehx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-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":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"richiehx":21,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"# Nano Chatbot User Guide","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"Nano is a **Chatbot for tracking tasks, optimised for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you possess fast typing skills, Nano has the potential to expedite your contact management tasks more efficiently than conventional GUI applications.","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"## Quick start","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"1. Ensure that Java `11` or above installed in your Computer.","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"2. Download the latest `duke.jar` from [here](https://github.com/richiehx/ip/releases/tag/A-Release).","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"3. Copy the file to the folder you want to use as the _home folder_ for your Nano Chatbot.","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"4. To run the application, open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar duke.jar` command to run the application.","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"5. A GUI similar to the below should appear in a few seconds.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"![Screenshot of Nano Chatbot Ui](Ui.png)","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"6. Type the command in the command box and press Enter or click the SEND button to execute it. e.g. typing `list` and pressing Enter will list out all the current tasks saved.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" Some example commands you can try:","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * `list` : Lists all tasks.","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" * `todo Task` : Adds a new task of type **Todo** with the title `Task` to the Chatbot.","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" * `delete 3` : Deletes the 3rd task shown in the current task list.","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * `mark 1` : Marks the 1st task shown in the current task list.","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * `bye` : Exits the app.","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"8. Refer to the Features below for details of each command.","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"### Creation of Tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":"There are 3 types of tasks that can be created: **Todo**, **Deadline** and **Event**.","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":"* **Todo** : A task with a description.","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":"* **Deadline** : A task with a description and a due date and time.","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":"* **Event** : A task with a description and the starting and ending date and time for the task.","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":"### Task Marking","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"Tasks can be marked as completed and unmarked when needed, allowing for better task tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":"### Task Editing","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"Tasks can be edited if needed.","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"## Feature Commands","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":"\u003cdiv markdown\u003d\"block\" class\u003d\"alert alert-info\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":"**:information_source: Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" e.g. in `add DESCRIPTION`, `DESCRIPTION` is a parameter which can be used as `add New Task`.","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":"* Parameters must be in the specified order.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" e.g. if the command specifies `DESC /by DEADLINE`, the parameter order must be followed.","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `list` and `bye`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" e.g. if the command specifies `list 123`, it will be interpreted as `list`.","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":"### Adding a Todo Task: `todo`","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"Adds a **Todo** Task to the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":"Format: `todo DESCRIPTION`","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":"* `todo Do CS2103T project`","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":"* `todo Watch CS2103T Lecture`","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"### Adding a Deadline Task: `deadline`","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":"Adds a **Deadline** Task to the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":"Format: `deadline DESCRIPTION /by DUE_DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":"* All parameter fields must be provided.","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":"* `DUE_DATE` must follow the format of `yyyy-mm-dd HH:mm` (year-month-day hours:minutes)","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":"* `deadline Do CS2103T project /by 2023-09-22 23:59` Creates a new Deadline Task with the description `Do CS2103T project` and due by `22 September 2023 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":"* `deadline Watch CS2103T Lecture /by 2023-09-19 23:59` Creates a new Deadline Task with the description `Watch CS2103T Lecture` and due by `19 September 2023 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":"### Adding an Event Task: `event`","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":"Adds an **Event** Task to the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":"Format: `event DESCRIPTION /from START_DATE /to END_DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":"* All parameter fields must be provided.","lastModifiedDate":"2023-09-18"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":"* `START_DATE` and `END_DATE` must follow the format of `yyyy-mm-dd HH:mm` (year-month-day hours:minutes)","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":"* `Event Do CS2103T project /from 2023-08-01 00:00 /to 2023-12-01 23:59` Creates a new Event Task with the description `Do CS2103T project` starting from `01 August 2023 00:00` and ending on `01 December 2023 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":"* `Event Watch CS2103T Lecture /from 2023-09-15 16:00 /to 2023-09-15 18:00` Creates a new Event Task with the description `Watch CS2103T Lecture` starting from `15 September 2023 16:00` and ending on `15 September 2023 18:00`","lastModifiedDate":"2023-09-18"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":"Shows a list of all tasks in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":"Format: `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":"### Marking a task: `mark`","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":"Marks the specified task as complete.","lastModifiedDate":"2023-09-18"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":"Format: `mark INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":"* Marks the task at the specified `INDEX`.","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":"* The index refers to the index number shown in the full Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":"* mark 1 : Marks the 1st task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":"### Marking a task: `mark`","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":"Unmarks the specified task as incomplete.","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":"Format: `unmark INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":"* Unmarks the task at the specified `INDEX`.","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":"* The index refers to the index number shown in the full Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":"* unmark 1 : Unmarks the 1st task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":"### Editing a task: `edit`","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":"Edits an existing task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":"Format: `edit INDEX FIELD_TO_EDIT NEW_VALUE`","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":"* Edits the task at the specified `INDEX`. The index refers to the index number shown in the displayed Task List. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":"* All parameter fields must be provided.","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":"#### 1. Editing a Todo Task","lastModifiedDate":"2023-09-18"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":"For **Todo** tasks, only the description can be edited.","lastModifiedDate":"2023-09-18"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":"* `FIELD_TO_EDIT`: Possible fields are `/desc`","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":"* `NEW_VALUE`: The new value must follow the restrictions of the specified field.","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":"* `edit 1 /desc newDesc` Edits the description of the 1st task to be `newDesc`.","lastModifiedDate":"2023-09-18"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":"#### 2. Editing a Deadline Task","lastModifiedDate":"2023-09-18"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":"For **Deadline** tasks, the description and due date can be edited.","lastModifiedDate":"2023-09-18"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":"* `FIELD_TO_EDIT`: Possible fields are `/desc`, `/by`","lastModifiedDate":"2023-09-18"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":"* `NEW_VALUE`: The new value must follow the restrictions of the specified field. (For `/by`, the `NEW_VALUE` must follow the format of `yyyy-mm-dd HH:mm`)","lastModifiedDate":"2023-09-18"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":"* `edit 1 /desc newDesc` Edits the description of the 1st task to be `newDesc`.","lastModifiedDate":"2023-09-18"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":"* `edit 2 /by 2023-10-12 22:12` Edits the due date of the 2nd task to be `12 October 2023 22:12`.","lastModifiedDate":"2023-09-18"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":"#### 3. Editing an Event Task","lastModifiedDate":"2023-09-18"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":"For **Event** tasks, the description, start time and end time can be edited.","lastModifiedDate":"2023-09-18"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":"* `FIELD_TO_EDIT`: Possible fields are `/desc`, `/from`, `/to`","lastModifiedDate":"2023-09-18"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":"* `NEW_VALUE`: The new value must follow the restrictions of the specified field. (For `/from` and `/to`, the `NEW_VALUE` must follow the format of `yyyy-mm-dd HH:mm`)","lastModifiedDate":"2023-09-18"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":"* `edit 1 /desc newDesc` Edits the description of the 1st task to be `newDesc`.","lastModifiedDate":"2023-09-18"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":"* `edit 2 /from 2023-10-12 22:12` Edits the start time of the 2nd task to be `12 October 2023 22:12`.","lastModifiedDate":"2023-09-18"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":"* `edit 2 /to 2023-10-13 20:10` Edits the end time of the 2nd task to be `13 October 2023 20:10`.","lastModifiedDate":"2023-09-18"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":"### Locating tasks by description: `find`","lastModifiedDate":"2023-09-18"},{"lineNumber":166,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":167,"author":{"gitId":"richiehx"},"content":"Finds tasks whose description contain the given keyword.","lastModifiedDate":"2023-09-18"},{"lineNumber":168,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":169,"author":{"gitId":"richiehx"},"content":"Format: `find KEYWORD`","lastModifiedDate":"2023-09-18"},{"lineNumber":170,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":171,"author":{"gitId":"richiehx"},"content":"* The search is case-sensitive. e.g `task` will **NOT** match `Task`","lastModifiedDate":"2023-09-18"},{"lineNumber":172,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":173,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":174,"author":{"gitId":"richiehx"},"content":"* `find Do` returns `Do work` and `Do tutorial`","lastModifiedDate":"2023-09-18"},{"lineNumber":175,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":176,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":177,"author":{"gitId":"richiehx"},"content":"### Deleting a person : `delete`","lastModifiedDate":"2023-09-18"},{"lineNumber":178,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":179,"author":{"gitId":"richiehx"},"content":"Deletes the specified task from the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":180,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":181,"author":{"gitId":"richiehx"},"content":"Format: `delete INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":182,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":183,"author":{"gitId":"richiehx"},"content":"* Deletes the task at the specified `INDEX`.","lastModifiedDate":"2023-09-18"},{"lineNumber":184,"author":{"gitId":"richiehx"},"content":"* The index refers to the index number shown in the full Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":185,"author":{"gitId":"richiehx"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":186,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":187,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":188,"author":{"gitId":"richiehx"},"content":"* `list` followed by `delete 2` deletes the 2nd task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":189,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":191,"author":{"gitId":"richiehx"},"content":"### Exiting the program : `bye`","lastModifiedDate":"2023-09-18"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":193,"author":{"gitId":"richiehx"},"content":"Exits the program.","lastModifiedDate":"2023-09-18"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":195,"author":{"gitId":"richiehx"},"content":"Format: `bye`","lastModifiedDate":"2023-09-18"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":197,"author":{"gitId":"richiehx"},"content":"### Saving the data","lastModifiedDate":"2023-09-18"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":199,"author":{"gitId":"richiehx"},"content":"AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2023-09-18"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":201,"author":{"gitId":"richiehx"},"content":"### Editing the data file","lastModifiedDate":"2023-09-18"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":203,"author":{"gitId":"richiehx"},"content":"AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users can update data directly by editing that data file.","lastModifiedDate":"2023-09-18"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":205,"author":{"gitId":"richiehx"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-warning\"\u003e:exclamation: **Caution:**","lastModifiedDate":"2023-09-18"},{"lineNumber":206,"author":{"gitId":"richiehx"},"content":"If your changes to the data file makes its format invalid, Nano may process the data wrongly and load corrupted data. Hence, it is recommended to take a backup of the file before editing it.","lastModifiedDate":"2023-09-18"},{"lineNumber":207,"author":{"gitId":"richiehx"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":209,"author":{"gitId":"richiehx"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-18"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":211,"author":{"gitId":"richiehx"},"content":"## Command summary","lastModifiedDate":"2023-09-18"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":213,"author":{"gitId":"richiehx"},"content":"Action | Format, Examples","lastModifiedDate":"2023-09-18"},{"lineNumber":214,"author":{"gitId":"richiehx"},"content":"--------|------------------","lastModifiedDate":"2023-09-18"},{"lineNumber":215,"author":{"gitId":"richiehx"},"content":"**Add Todo** | `todo DESCRIPTION` \u003cbr\u003e e.g., `todo newTask`","lastModifiedDate":"2023-09-18"},{"lineNumber":216,"author":{"gitId":"richiehx"},"content":"**Add Deadline** | `deadline DESCRIPTION /by DUE_DATE` \u003cbr\u003e e.g., `deadline Do CS2103T project /by 2023-09-22 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":217,"author":{"gitId":"richiehx"},"content":"**Add Event** | `event DESCRIPTION /from START_DATE /to END_DATE` \u003cbr\u003e e.g., `Event Do CS2103T project /from 2023-08-01 00:00 /to 2023-12-01 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":218,"author":{"gitId":"richiehx"},"content":"**Mark Task** | `mark INDEX`\u003cbr\u003e e.g., `mark 2`","lastModifiedDate":"2023-09-18"},{"lineNumber":219,"author":{"gitId":"richiehx"},"content":"**Unmark Task** | `unmark INDEX`\u003cbr\u003e e.g., `unmark 2`","lastModifiedDate":"2023-09-18"},{"lineNumber":220,"author":{"gitId":"richiehx"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2023-09-18"},{"lineNumber":221,"author":{"gitId":"richiehx"},"content":"**Edit** | `edit INDEX FIELD_TO_EDIT NEW_VALUE` \u003cbr\u003e e.g.,`edit 2 /desc newDesc`","lastModifiedDate":"2023-09-18"},{"lineNumber":222,"author":{"gitId":"richiehx"},"content":"**Find** | `find KEYWORD`\u003cbr\u003e e.g., `find tutorial`","lastModifiedDate":"2023-09-18"},{"lineNumber":223,"author":{"gitId":"richiehx"},"content":"**List** | `list`","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"richiehx":209,"-":14}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" * Duke is a Chatbot that helps you keep track of your tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" * In this version, Duke is renamed to Nano.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * The file path to store the User\u0027s Task Data.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" private static final String FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" * The storage that is used to save and load the user\u0027s tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" * The Message to display when the Chat is Ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" private static final String END_CHAT_MESSAGE \u003d \"Chat has ended! Please Exit.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * The Error Message to display when Invalid command is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_ERROR_MESSAGE \u003d \"I don\u0027t understand what you\u0027re saying.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" * The task list that is used to store the user\u0027s tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" * Boolean value to check if the chat has ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" private boolean isChatEnd \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * Handles the Chatbot Response.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * @param input The raw String data.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" * @return The String response of the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" if (isChatEnd) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" Command command \u003d parseLine.getCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" if (command \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" return INVALID_ERROR_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" case BYE:","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" isChatEnd \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" return END_CHAT_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" case LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" return tasks.formatList();","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" return tasks.handleMarking(parseLine.getArguments(), command.getCommandName());","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" return tasks.handleDelete(parseLine.getArguments());","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" String todoData \u003d parseLine.parseToDoArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" return tasks.handleToDo(todoData);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" String[] deadlineData \u003d parseLine.parseDeadlineArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" return tasks.handleDeadline(deadlineData[0], deadlineData[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" String[] eventData \u003d parseLine.parseEventArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" return tasks.handleEvent(eventData[0], eventData[1], eventData[2]);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" case FIND:","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" String findQuery \u003d parseLine.parseFindQuery();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" return tasks.findTasks(findQuery).formatList();","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" case EDIT:","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" String[] editArgs \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" for (String item : editArgs) {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" System.out.println(item);","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" return tasks.editTask(editArgs[0], editArgs[1], editArgs[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" return INVALID_ERROR_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" * Runs the Chatbot program.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" public void run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" assert !isChatEnd : \"Chat should not be Ended when first run!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" tasks \u003d new TaskList(storage.load(), storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" * The main method is used to run the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" new Duke().run();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":130,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"richiehx":127,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":13}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * The Command enum for the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public enum Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" FIND(\"find\"),","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" EDIT(\"edit\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * The String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" private String value;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" * The Constructor for the Command class.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" * @param value The String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" Command(String value) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" this.value \u003d value;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * Returns the respective command of the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" * @param value The input String containing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" * @return The respective command of the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" public static Command getCommand(String value) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" for (Command cmd : Command.values()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" if (cmd.value.equals(value)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" return cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" * Returns the String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * @return The String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" public String getCommandName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" return this.value;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"richiehx":55}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * A Checked Exception that is thrown when there is an error in the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" * The Constructor for the Exception class.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * @param message The message given when the Exception is thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"richiehx":16}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" * The Parser to parse input for the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Description is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_DESC_MESSAGE \u003d \"Hey! The task description cannot be empty!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Deadline is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_DEADLINE_MESSAGE \u003d \"Hey, the Deadline given is Invalid! \"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" + \"Make sure that you follow this format:\\n\" + \" \u0027taskDescription /by yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Event is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_EVENT_MESSAGE \u003d \"Hey, the Event given is Invalid!\"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" + \" Make sure that you follow this format:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" + \" \u0027eventDescription /from yyyy-mm-dd HH:mm /to yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Event is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_EDIT_MESSAGE \u003d \"The parameters for the Edit command are Invalid. \"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" + \"Edit only one field at a time!\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" + \"Follow this format:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" + \" \u0027edit taskIndex /fieldToEdit editData\u0027\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" + \"Eg. \u0027edit 4 /desc newTaskTitle\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" * The command parsed from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" private Command command;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" * The arguments parsed from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" private String arguments \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * The Constructor of the Parser.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * @param rawData The data to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" public Parser(String rawData) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" this.command \u003d parseCommand(rawData);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" * Parses the input given to the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * @param rawData Input from the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" * @return The given Command from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if there is no input.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" public Command parseCommand(String rawData) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" String[] commandArray \u003d rawData.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" if (commandArray.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Hey, Type Something!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" } else if (commandArray.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" this.arguments \u003d commandArray[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" return Command.getCommand(commandArray[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" * Returns the command of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" * @return The command of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" public Command getCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" return this.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" * Returns the arguments of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" * @return The arguments of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" public String getArguments() {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" return this.arguments;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" * Parses the ToDo Arguments from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" * @return The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" public String parseToDoArguments() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" if (arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" return arguments;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" * Parses the find arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":" * @return The arguments of the find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if argument is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" public String parseFindQuery() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" if (arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" return arguments;","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" * Parses the Deadline arguments from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" * @return The String Array containing the description as the first element","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" * and time as the second element.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" public String[] parseDeadlineArguments() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" if (this.arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" String[] arr \u003d this.arguments.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" if (arr.length !\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DEADLINE_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":" return arr;","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":" * Parses the Event arguments from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":" * @return The String array containing the description as the first element,","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":" * start time as the second element and end time as the third element.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":" public String[] parseEventArguments() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":" if (this.arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":" String[] arr \u003d this.arguments.split(\" /from \");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":" if (arr.length !\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_EVENT_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":" String desc \u003d arr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":" String[] startEnd \u003d arr[1].split(\" /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":" if (startEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_EVENT_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":" String start \u003d startEnd[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":" String end \u003d startEnd[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"richiehx"},"content":" return new String[]{desc, start, end};","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"richiehx"},"content":" * Parses the Edit arguments from the input.","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"richiehx"},"content":" * @return The String array containing the Index of the Task, the Edit Type and the Edit Data.","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the arguments are invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"richiehx"},"content":" public String[] parseEditArguments() throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"richiehx"},"content":" String[] commandArray \u003d arguments.split(\"\\\\s+\", 3);","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"richiehx"},"content":" if (commandArray.length !\u003d 3) {","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_EDIT_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"richiehx"},"content":" String index \u003d commandArray[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"richiehx"},"content":" String editType \u003d commandArray[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"richiehx"},"content":" String editData \u003d commandArray[2];","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"richiehx"},"content":" return new String[]{index, editType, editData};","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"richiehx":189}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * The Storage to read and write from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" * A Temporary storage for reading the Tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" private ArrayList\u003cTask\u003e store \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" * The file path to read and write data from.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" private String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" * The formatter to parse the time of the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter storeTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" * The formatter to format the time of the tasks to store.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" * Constructor for the Storage.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" * @param filePath The file path of the data file to write and read from.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" assert filePath.length() !\u003d 0 : \"File Path should be specified!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" * Saves the data to the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" * @param data The data to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" public void saveData(String data) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" fw.write(data);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" System.out.println(\"Could not save data to storage!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" * Loads the task data from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" * @return The Task List from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if data file is corrupted or not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" // Process file line input","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" String newLine \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" String[] taskComponents \u003d newLine.split(\" \\\\| \");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" String type \u003d taskComponents[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" String isCompleted \u003d taskComponents[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" String desc \u003d taskComponents[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" Task item \u003d new ToDo(taskComponents[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" if (isCompleted.equals(\"X\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" item.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" store.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" if (taskComponents.length \u003c 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Deadline Format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" LocalDateTime buffer \u003d LocalDateTime.parse(taskComponents[3], storeTimeFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" Task item \u003d new Deadline(desc, buffer.format(inputFormatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" if (isCompleted.equals(\"X\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" item.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" store.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" if (taskComponents.length \u003c 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Event Format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" String[] timeComponents \u003d taskComponents[3].split(\"-\", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" if (taskComponents.length \u003c 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Event Format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" LocalDateTime bufferStart \u003d LocalDateTime.parse(timeComponents[0], storeTimeFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" LocalDateTime bufferEnd \u003d LocalDateTime.parse(timeComponents[1], storeTimeFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" Task item \u003d new Event(desc, bufferStart.format(inputFormatter), bufferEnd.format(inputFormatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" if (isCompleted.equals(\"X\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" item.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" store.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"File not Found!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" return store;","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"richiehx":138}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * A task that needs to be done before a specific date/time.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * The date and time of the deadline.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" protected String by;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" * The input formatter to parse Date and Time input.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" * The output formatter to format Date and Time output.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * @param description The description of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * @param date The deadline of the Deadline task. Must follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the deadline does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" public Deadline(String description, String date) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(date, inputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" by \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Deadline time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * Updates the due date of the Deadline Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * @param newDate The new due date.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the deadline does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" public void updateDeadline(String newDate) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(newDate, inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" by \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Deadline time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" return \"D | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.by;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":82}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * A Task that starts at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * The start time of the Event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" protected String start;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" * The end time of the Event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" protected String end;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" * The input formatter to parse Date and Time input.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * The output formatter to format Date and Time output.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" * Constructor for an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" * @param startTime The start time of the Event task. Must follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" * @param endTime The end time of the Event task. Must follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the times do not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" public Event(String description, String startTime, String endTime) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" LocalDateTime parseStart \u003d LocalDateTime.parse(startTime, inputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" LocalDateTime parseEnd \u003d LocalDateTime.parse(endTime, inputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" start \u003d parseStart.format(outputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" end \u003d parseEnd.format(outputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Event times must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" * Updates the start time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" * @param newDate The new start time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the start time does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" public void updateStart(String newDate) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(newDate, inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" start \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Event Start time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" * Updates the end time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" * @param newDate The new end time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the end time does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" public void updateEnd(String newDate) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(newDate, inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" end \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Event End time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" return \"E | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.start + \"-\" + this.end;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.start + \" to: \" + this.end + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":105}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * A Class to Represent a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" * The description of the Task.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" * The boolean to represent if the Task is Done.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * Constructor for a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" * Returns the status of the checkbox for the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * @return String [ ] if not done, [X] if done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" * Marks the Task as Done.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" public void markTask() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" * Marks the Task as Not Done.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * Returns the description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" * @return The description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" * Updates the Description of the Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" * @param newDesc The new description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" public void updateDesc(String newDesc) {","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" System.out.println(newDesc);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" this.description \u003d newDesc;","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String of the Task to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" return this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"richiehx":88}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" * Represents a Task List to store User\u0027s Tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Index is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_INDEX_MESSAGE \u003d \"Invalid Task Index provided!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * The ArrayList to represent the Task List.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" * The Storage for the Chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * The Constructor for the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * @param taskList The ArrayList to initialise as the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * @param storage The Storage of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" assert taskList !\u003d null : \"TaskList should be initialised!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" assert storage !\u003d null : \"Storage should be initialised!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" * Formats the Task List to output.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" * @return The formatted task list as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" public String formatList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" int len \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" str \u003d str + (i + 1) + \". \" + taskList.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" if (i !\u003d (len - 1)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" str +\u003d \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" return str;","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" * Handles the Marking of the Tasks in the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" * @param commandNum The Index of the Task as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" * @param status The status of the marking as either \u0027mark\u0027 or \u0027unmark\u0027.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If Task Index provided is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" public String handleMarking(String commandNum, String status) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" int index \u003d Integer.parseInt(commandNum) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" String buffer \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" if (index \u003e taskList.size() - 1 || index \u003c 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" Task selectedTask \u003d taskList.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" if (status.equals(\"mark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" selectedTask.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" buffer \u003d \"Nice! I\u0027ve marked the task as done:\\n\" + selectedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" } else if (status.equals(\"unmark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" selectedTask.unmarkTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" buffer \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\" + selectedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" return buffer;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" * Formats the return Message for deleting and adding Tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" * @param status The action type of the Message.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" * @param task The task to be added or removed.","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" * @param size The size of the taskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" * @return The formatted String Message.","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" private String formatMessage(String status, Task task, Integer size) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" return \"Noted. I\u0027ve \" + status + \" this task:\\n\" + task + \"\\nNow you have \"","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" * Handles the Deleting of a Task from the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" * @param commandNum The Index of the Task as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If Task Index provided is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" public String handleDelete(String commandNum) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" int index \u003d Integer.parseInt(commandNum) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" if (index \u003e taskList.size() - 1 || index \u003c 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" Task selectedTask \u003d taskList.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"removed\", selectedTask, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" * Handles the Adding of a ToDo Task to the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" * @param task The Description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" public String handleToDo(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":" ToDo item \u003d new ToDo(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" taskList.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"added\", item, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" * Handles the Adding of a Deadline Task to the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":" * @param desc The Description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":" * @param by The deadline of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if there is an Error in creating the Deadline Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":" public String handleDeadline(String desc, String by) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":" Deadline item \u003d new Deadline(desc, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":" taskList.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"added\", item, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":" * Handles the Adding of an Event Task to the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":" * @param desc The Description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":" * @param start The start time of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":" * @param end The end time of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if there is an Error in creating the Event Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":" public String handleEvent(String desc, String start, String end) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"richiehx"},"content":" Event item \u003d new Event(desc, start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":167,"author":{"gitId":"richiehx"},"content":" taskList.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"added\", item, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"richiehx"},"content":" * Finds the tasks containing the query and returns a new Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"richiehx"},"content":" * @param query The query to find the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"richiehx"},"content":" * @return The new Task List containing the tasks that contain the query.","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"richiehx"},"content":" public TaskList findTasks(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"richiehx"},"content":" ArrayList\u003cTask\u003e buffer \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"richiehx"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"richiehx"},"content":" if (task.getDescription().contains(query)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"richiehx"},"content":" buffer.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"richiehx"},"content":" return new TaskList(buffer, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"richiehx"},"content":" * Edits the selected task.","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"richiehx"},"content":" * @param strIndex The Index of the Task in the Task List.","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"richiehx"},"content":" * @param editType The type of Edit to be made. (\"/desc\", \"/by\", \"/from\", \"/to\")","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"richiehx"},"content":" * @param editData The new data.","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If Task Index provided is invalid or command parameters are invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"richiehx"},"content":" public String editTask(String strIndex, String editType, String editData) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"richiehx"},"content":" Task selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"richiehx"},"content":" int index \u003d Integer.parseInt(strIndex) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"richiehx"},"content":" if (index \u003e taskList.size() - 1 || index \u003c 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"richiehx"},"content":" selectedTask \u003d taskList.get(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"richiehx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"richiehx"},"content":" if (selectedTask \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"No Task Selected!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":213,"author":{"gitId":"richiehx"},"content":" if (editType.equals(\"/desc\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":214,"author":{"gitId":"richiehx"},"content":" selectedTask.updateDesc(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":215,"author":{"gitId":"richiehx"},"content":" } else if (editType.equals(\"/by\") \u0026\u0026 selectedTask instanceof Deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":216,"author":{"gitId":"richiehx"},"content":" Deadline buffer \u003d (Deadline) selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":217,"author":{"gitId":"richiehx"},"content":" buffer.updateDeadline(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":218,"author":{"gitId":"richiehx"},"content":" } else if (editType.equals(\"/from\") \u0026\u0026 selectedTask instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"richiehx"},"content":" Event buffer \u003d (Event) selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":220,"author":{"gitId":"richiehx"},"content":" buffer.updateStart(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":221,"author":{"gitId":"richiehx"},"content":" } else if (editType.equals(\"/to\") \u0026\u0026 selectedTask instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":222,"author":{"gitId":"richiehx"},"content":" Event buffer \u003d (Event) selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":223,"author":{"gitId":"richiehx"},"content":" buffer.updateEnd(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":224,"author":{"gitId":"richiehx"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":225,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Edit Command!\\nMake sure that the Task is of the correct type!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":226,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"updated\", selectedTask, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"richiehx"},"content":" * Formats the Task List to be saved to Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"richiehx"},"content":" * @return The formatted List as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"richiehx"},"content":" public String exportList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":237,"author":{"gitId":"richiehx"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":238,"author":{"gitId":"richiehx"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":239,"author":{"gitId":"richiehx"},"content":" sb.append(task.exportData()).append(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":240,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":241,"author":{"gitId":"richiehx"},"content":" return sb.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":242,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":243,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":244,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"richiehx"},"content":" * Saves the Task List to the Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"richiehx"},"content":" public void saveList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":248,"author":{"gitId":"richiehx"},"content":" String data \u003d this.exportList();","lastModifiedDate":"2023-08-28"},{"lineNumber":249,"author":{"gitId":"richiehx"},"content":" storage.saveData(data);","lastModifiedDate":"2023-08-28"},{"lineNumber":250,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":251,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":252,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":253,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"richiehx":253}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * A Task to be done.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" * The Constructor for a ToDo Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" return \"T | \" + this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" * @return String representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":35}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"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":"richiehx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"richiehx"},"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":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":61}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" duke.run();","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" stage.setTitle(\"Nano\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":33}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * Initializes the Main Window for the GUI.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" String input \u003d \"Hello! I\u0027m Nano. What can I do for you?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" DialogBox.getDukeDialog(input, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"richiehx"},"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":48,"author":{"gitId":"richiehx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":60}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":" * Handles User Interface output","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * The Indentation Level to format text.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" public static final String INDENTATION \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * Scanner to read user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" * Returns the input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" * @return The input from the user as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * Formats and Returns the given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * @param output The raw output to be formatted.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * @return The formatted output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" private static String formatOutput(String output) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" String horizontalLine \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" return INDENTATION + horizontalLine + \"\\n \"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" + INDENTATION + output + \u0027\\n\u0027 + INDENTATION + horizontalLine + \u0027\\n\u0027;","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" * Prints the Greeting of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" public void printGreeting() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(\"Hello! I\u0027m Nano\\n\" + INDENTATION + \" What can I do for you?\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * Prints the Goodbye of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" public void printBye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(\"Bye. Hope to see you again soon!\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" * Prints the Invalid Command Output of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" public void printInvalidCommandError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(\"I don\u0027t understand what you\u0027re saying.\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * Prints the formatted output of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" * @param rawOutput The raw output to be formatted and printed.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" public void printOutput(String rawOutput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(rawOutput));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"richiehx":72}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"richiehx"},"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-06"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" \u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" \u003cCircle centerX\u003d\"49.5\" centerY\u003d\"49.5\" radius\u003d\"49.5\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"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":"richiehx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" public void parseToDoSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"todo boo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" String actual \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseToDoArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"boo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" public void parseDeadlineSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"deadline boo /by 2001-12-10 11:11\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseDeadlineArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" String expectedName \u003d \"boo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" String expectedBy \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedName, actual[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedBy, actual[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" public void testParseDeadlineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"deadline boo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" parseLine.parseDeadlineArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Hey, the Deadline given is Invalid! \"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" + \"Make sure that you follow this format:\\n\" + \" \u0027taskDescription /by yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public void parseEventSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"event boo /from 2001-12-10 11:11 /to 2001-12-10 11:12\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEventArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" String expectedName \u003d \"boo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" String expectedFrom \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" String expectedTo \u003d \"2001-12-10 11:12\";","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedName, actual[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedFrom, actual[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedTo, actual[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" public void testParseEventError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"event boo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" parseLine.parseEventArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Hey, the Event given is Invalid!\"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" + \" Make sure that you follow this format:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" + \" \u0027eventDescription /from yyyy-mm-dd HH:mm /to yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" public void parseEditToDoSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /desc boo\");","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" String expectedDesc \u003d \"boo\";","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedDesc, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" public void parseEditDeadlineDescSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /desc boo\");","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" String expectedDesc \u003d \"boo\";","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedDesc, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" public void parseEditDeadlineBySuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /by 2001-12-10 11:11\");","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" String expectedBy \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedBy, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":" public void parseEditEventFromSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /from 2001-12-10 11:11\");","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":" String expectedFrom \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedFrom, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":" public void parseEditEventToSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /to 2001-12-10 11:11\");","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":" String expectedTo \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedTo, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"richiehx":165}},{"path":"src/test/java/duke/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" public void testAddToDoSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" String actual \u003d testList.handleToDo(\"test desc\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Noted. I\u0027ve added this task:\\n\" + \"[T][ ] test desc\" + \"\\nNow you have \"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" + 1 + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" public void testAddDeadlineSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" String actual \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" actual \u003d testList.handleDeadline(\"boo\", \"2001-10-22 11:12\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" fail(\"Did not add Deadline successfully\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Noted. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" + \"[D][ ] boo (by: 22 October 2001 11:12)\" + \"\\nNow you have \"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" + 1 + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" public void testAddDeadlineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" testList.handleDeadline(\"boo\", \"2001-10-22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Deadline time must be in this format: yyyy-mm-dd HH:mm\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public void testAddEventSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" String actual \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" actual \u003d testList.handleEvent(\"boo\", \"2001-10-22 11:12\", \"2001-11-22 11:12\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" fail(\"Did not add Event successfully\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Noted. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" + \"[E][ ] boo (from: 22 October 2001 11:12 to: 22 November 2001 11:12)\"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" + \"\\nNow you have \" + 1 + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" public void testAddEventError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" testList.handleEvent(\"boo\", \"2001-10-22 11:12\", \"2001-11-22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Event times must be in this format: yyyy-mm-dd HH:mm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"richiehx":81}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"T | | boo1","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"D | | return book | 01 December 2021 11:11","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"E | | project meeting | 01 December 2021 11:11-01 December 2021 11:12","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"richiehx":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"todo boo1","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"todo boo2","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"delete 2","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"deadline return book /by 2021-12-01 11:11","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"event project meeting /from 2021-12-01 11:11 /to 2021-12-01 11:12","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"delete 2","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":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":"richiehx"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-31"},{"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":"richiehx"},"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":{"richiehx":2,"-":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":{"richiehx":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":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-07"},{"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":"richiehx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-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":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"richiehx":21,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"# Nano Chatbot User Guide","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"Nano is a **Chatbot for tracking tasks, optimised for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you possess fast typing skills, Nano has the potential to expedite your task management more efficiently than conventional GUI applications.","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"## Quick start","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"1. Ensure that Java `11` or above installed in your Computer.","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"2. Download the latest `duke.jar` from [here](https://github.com/richiehx/ip/releases/tag/A-Release).","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"3. Copy the file to the folder you want to use as the _home folder_ for your Nano Chatbot.","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"4. To run the application, open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar duke.jar` command to run the application.","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"5. A GUI similar to the below should appear in a few seconds.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"![Screenshot of Nano Chatbot Ui](Ui.png)","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"6. Type the command in the command box and press Enter or click the SEND button to execute it. e.g. typing `list` and pressing Enter will list out all the current tasks saved.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" Some example commands you can try:","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * `list` : Lists all tasks.","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" * `todo Task` : Adds a new task of type **Todo** with the title `Task` to the Chatbot.","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" * `delete 3` : Deletes the 3rd task shown in the current task list.","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * `mark 1` : Marks the 1st task shown in the current task list.","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * `bye` : Exits the app.","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"8. Refer to the Features below for details of each command.","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"### Creation of Tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":"There are 3 types of tasks that can be created: **Todo**, **Deadline** and **Event**.","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":"* **Todo** : A task with a description.","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":"* **Deadline** : A task with a description and a due date and time.","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":"* **Event** : A task with a description and the starting and ending date and time for the task.","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":"### Task Marking","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"Tasks can be marked as completed and unmarked when needed, allowing for better task tracking.","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":"### Task Editing","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"Tasks can be edited if needed.","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"## Feature Commands","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":"\u003cdiv markdown\u003d\"block\" class\u003d\"alert alert-info\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":"**:information_source: Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" e.g. in `todo DESCRIPTION`, `DESCRIPTION` is a parameter which can be used as `todo New Task`.","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":"* Parameters must be in the specified order.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" e.g. if the command specifies `DESC /by DEADLINE`, the parameter order must be followed.","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `list` and `bye`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" e.g. if the command specifies `list 123`, it will be interpreted as `list`.","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":"### Adding a Todo Task: `todo`","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"Adds a **Todo** Task to the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":"Format: `todo DESCRIPTION`","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":"* `todo Watch CS2103T Lecture`","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve added this task: ","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":"[T][ ] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":"### Adding a Deadline Task: `deadline`","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":"Adds a **Deadline** Task to the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":"Format: `deadline DESCRIPTION /by DUE_DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":"* All parameter fields must be provided.","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":"* `DUE_DATE` must follow the format of `yyyy-mm-dd HH:mm` (year-month-day hours:minutes)","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":"* `deadline Do CS2103T project /by 2023-09-22 23:59` : Creates a new Deadline Task with the description `Do CS2103T project` and due by `22 September 2023 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":"[D][ ] Do CS2103T project (by: 22 September 2023 23:59)","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":"Now you have 2 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":"### Adding an Event Task: `event`","lastModifiedDate":"2023-09-18"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":"Adds an **Event** Task to the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":"Format: `event DESCRIPTION /from START_DATE /to END_DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":"* All parameter fields must be provided.","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":"* `START_DATE` and `END_DATE` must follow the format of `yyyy-mm-dd HH:mm` (year-month-day hours:minutes)","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":"* `event Watch CS2103T Lecture /from 2023-09-15 16:00 /to 2023-09-15 18:00` : Creates a new Event Task with the description `Watch CS2103T Lecture` starting from `15 September 2023 16:00` and ending on `15 September 2023 18:00`","lastModifiedDate":"2023-09-18"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":"[E][ ] Watch CS2103T Lecture (from: 15 September 2023 16:00 to: 15 September 2023 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":"Now you have 3 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":"Shows a list of all tasks in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":"Format: `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":"1. [T][ ] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":"2. [D][ ] Do CS2103T project (by: 22 September 2023 23:59)","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":"3. [E][ ] Watch CS2103T Lecture (from: 15 September 2023 16:00 to: 15 September 2023 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":"### Marking a task: `mark`","lastModifiedDate":"2023-09-18"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":"Marks the specified task as complete.","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":"Format: `mark INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":"* Marks the task at the specified `INDEX`.","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":"* The index refers to the index number shown in the full Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":"* `mark 1` : Marks the 1st task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-18"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":"[T][X] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":146,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":"### Unmarking a task: `unmark`","lastModifiedDate":"2023-09-18"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":"Unmarks the specified task as incomplete.","lastModifiedDate":"2023-09-18"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":"Format: `unmark INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":"* Unmarks the task at the specified `INDEX`.","lastModifiedDate":"2023-09-18"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":"* The index refers to the index number shown in the full Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":"* `unmark 1` : Unmarks the 1st task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-09-18"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":"[T][ ] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":166,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":167,"author":{"gitId":"richiehx"},"content":"### Editing a task: `edit`","lastModifiedDate":"2023-09-18"},{"lineNumber":168,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":169,"author":{"gitId":"richiehx"},"content":"Edits an existing task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":170,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":171,"author":{"gitId":"richiehx"},"content":"Format: `edit INDEX FIELD_TO_EDIT NEW_VALUE`","lastModifiedDate":"2023-09-18"},{"lineNumber":172,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":173,"author":{"gitId":"richiehx"},"content":"* Edits the task at the specified `INDEX`. The index refers to the index number shown in the displayed Task List. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":174,"author":{"gitId":"richiehx"},"content":"* All parameter fields must be provided.","lastModifiedDate":"2023-09-18"},{"lineNumber":175,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":176,"author":{"gitId":"richiehx"},"content":"#### 1. Editing a Todo Task","lastModifiedDate":"2023-09-18"},{"lineNumber":177,"author":{"gitId":"richiehx"},"content":"For **Todo** tasks, only the description can be edited.","lastModifiedDate":"2023-09-18"},{"lineNumber":178,"author":{"gitId":"richiehx"},"content":"* `FIELD_TO_EDIT` : Possible fields are `/desc`","lastModifiedDate":"2023-09-18"},{"lineNumber":179,"author":{"gitId":"richiehx"},"content":"* `NEW_VALUE` : The new value must follow the restrictions of the specified field.","lastModifiedDate":"2023-09-18"},{"lineNumber":180,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":181,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":182,"author":{"gitId":"richiehx"},"content":"* `edit 1 /desc Do CS2103T Tutorial` : Edits the description of the 1st task to be `Do CS2103T Tutorial`.","lastModifiedDate":"2023-09-18"},{"lineNumber":183,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":184,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":185,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":186,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":187,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve updated this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":188,"author":{"gitId":"richiehx"},"content":"[T][ ] Do CS2103T Tutorial","lastModifiedDate":"2023-09-18"},{"lineNumber":189,"author":{"gitId":"richiehx"},"content":"Now you have 3 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":190,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":191,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":192,"author":{"gitId":"richiehx"},"content":"#### 2. Editing a Deadline Task","lastModifiedDate":"2023-09-18"},{"lineNumber":193,"author":{"gitId":"richiehx"},"content":"For **Deadline** tasks, the description and due date can be edited.","lastModifiedDate":"2023-09-18"},{"lineNumber":194,"author":{"gitId":"richiehx"},"content":"* `FIELD_TO_EDIT`: Possible fields are `/desc`, `/by`","lastModifiedDate":"2023-09-18"},{"lineNumber":195,"author":{"gitId":"richiehx"},"content":"* `NEW_VALUE`: The new value must follow the restrictions of the specified field. (For `/by`, the `NEW_VALUE` must follow the format of `yyyy-mm-dd HH:mm`)","lastModifiedDate":"2023-09-18"},{"lineNumber":196,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":197,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":198,"author":{"gitId":"richiehx"},"content":"* `edit 2 /desc Submit Project` : Edits the description of the 2nd task to be `Submit Project`.","lastModifiedDate":"2023-09-18"},{"lineNumber":199,"author":{"gitId":"richiehx"},"content":"* `edit 2 /by 2023-10-12 22:12` : Edits the due date of the 2nd task to be `12 October 2023 22:12`.","lastModifiedDate":"2023-09-18"},{"lineNumber":200,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":201,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":202,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":203,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":204,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve updated this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":205,"author":{"gitId":"richiehx"},"content":"[D][ ] Submit Project (by: 12 October 2023 22:12)","lastModifiedDate":"2023-09-18"},{"lineNumber":206,"author":{"gitId":"richiehx"},"content":"Now you have 3 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":207,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":208,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":209,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":210,"author":{"gitId":"richiehx"},"content":"#### 3. Editing an Event Task","lastModifiedDate":"2023-09-18"},{"lineNumber":211,"author":{"gitId":"richiehx"},"content":"For **Event** tasks, the description, start time and end time can be edited.","lastModifiedDate":"2023-09-18"},{"lineNumber":212,"author":{"gitId":"richiehx"},"content":"* `FIELD_TO_EDIT`: Possible fields are `/desc`, `/from`, `/to`","lastModifiedDate":"2023-09-18"},{"lineNumber":213,"author":{"gitId":"richiehx"},"content":"* `NEW_VALUE`: The new value must follow the restrictions of the specified field. (For `/from` and `/to`, the `NEW_VALUE` must follow the format of `yyyy-mm-dd HH:mm`)","lastModifiedDate":"2023-09-18"},{"lineNumber":214,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":215,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":216,"author":{"gitId":"richiehx"},"content":"* `edit 3 /desc Watch CS2100 Lecture` : Edits the description of the 3rd task to be `Watch CS2100 Lecture`.","lastModifiedDate":"2023-09-18"},{"lineNumber":217,"author":{"gitId":"richiehx"},"content":"* `edit 3 /from 2023-10-12 20:00` : Edits the start time of the 3rd task to be `12 October 2023 20:00`.","lastModifiedDate":"2023-09-18"},{"lineNumber":218,"author":{"gitId":"richiehx"},"content":"* `edit 3 /to 2023-10-13 22:00` : Edits the end time of the 3rd task to be `13 October 2023 22:00`.","lastModifiedDate":"2023-09-18"},{"lineNumber":219,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":220,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":221,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":222,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":223,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve updated this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":224,"author":{"gitId":"richiehx"},"content":"[E][ ] Watch CS2100 Lecture (from: 12 October 2023 20:00 to: 13 October 2023 22:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":225,"author":{"gitId":"richiehx"},"content":"Now you have 3 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":226,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":227,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":228,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":229,"author":{"gitId":"richiehx"},"content":"### Locating tasks by description: `find`","lastModifiedDate":"2023-09-18"},{"lineNumber":230,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":231,"author":{"gitId":"richiehx"},"content":"Finds tasks whose description contain the given keyword.","lastModifiedDate":"2023-09-18"},{"lineNumber":232,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":233,"author":{"gitId":"richiehx"},"content":"Format: `find KEYWORD`","lastModifiedDate":"2023-09-18"},{"lineNumber":234,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":235,"author":{"gitId":"richiehx"},"content":"* The search is case-sensitive. e.g. `task` will **NOT** match `Task`","lastModifiedDate":"2023-09-18"},{"lineNumber":236,"author":{"gitId":"richiehx"},"content":" ","lastModifiedDate":"2023-09-18"},{"lineNumber":237,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":238,"author":{"gitId":"richiehx"},"content":"- Current List : ","lastModifiedDate":"2023-09-18"},{"lineNumber":239,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":240,"author":{"gitId":"richiehx"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":241,"author":{"gitId":"richiehx"},"content":"1. [T][ ] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":242,"author":{"gitId":"richiehx"},"content":"2. [D][ ] Do CS2103T project (by: 22 September 2023 23:59)","lastModifiedDate":"2023-09-18"},{"lineNumber":243,"author":{"gitId":"richiehx"},"content":"3. [E][ ] Watch CS2100 Lecture (from: 15 September 2023 16:00 to: 15 September 2023 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":244,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":245,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":246,"author":{"gitId":"richiehx"},"content":"* `find Watch` : returns `Watch CS2103T Lecture` and `Watch CS2100 Lecture`","lastModifiedDate":"2023-09-18"},{"lineNumber":247,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":248,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":249,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":250,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":251,"author":{"gitId":"richiehx"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":252,"author":{"gitId":"richiehx"},"content":"1. [T][ ] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":253,"author":{"gitId":"richiehx"},"content":"2. [E][ ] Watch CS2100 Lecture (from: 15 September 2023 16:00 to: 15 September 2023 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":254,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":255,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":256,"author":{"gitId":"richiehx"},"content":"### Deleting a person : `delete`","lastModifiedDate":"2023-09-18"},{"lineNumber":257,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":258,"author":{"gitId":"richiehx"},"content":"Deletes the specified task from the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":259,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":260,"author":{"gitId":"richiehx"},"content":"Format: `delete INDEX`","lastModifiedDate":"2023-09-18"},{"lineNumber":261,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":262,"author":{"gitId":"richiehx"},"content":"* Deletes the task at the specified `INDEX`.","lastModifiedDate":"2023-09-18"},{"lineNumber":263,"author":{"gitId":"richiehx"},"content":"* The index refers to the index number shown in the full Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":264,"author":{"gitId":"richiehx"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2023-09-18"},{"lineNumber":265,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":266,"author":{"gitId":"richiehx"},"content":"Examples:","lastModifiedDate":"2023-09-18"},{"lineNumber":267,"author":{"gitId":"richiehx"},"content":"- Current List :","lastModifiedDate":"2023-09-18"},{"lineNumber":268,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":269,"author":{"gitId":"richiehx"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":270,"author":{"gitId":"richiehx"},"content":"1. [T][ ] Watch CS2103T Lecture","lastModifiedDate":"2023-09-18"},{"lineNumber":271,"author":{"gitId":"richiehx"},"content":"2. [D][ ] Do CS2103T project (by: 22 September 2023 23:59)","lastModifiedDate":"2023-09-18"},{"lineNumber":272,"author":{"gitId":"richiehx"},"content":"3. [E][ ] Watch CS2100 Lecture (from: 15 September 2023 16:00 to: 15 September 2023 18:00)","lastModifiedDate":"2023-09-18"},{"lineNumber":273,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":274,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":275,"author":{"gitId":"richiehx"},"content":"* `delete 2` : deletes the 2nd task in the Task List.","lastModifiedDate":"2023-09-18"},{"lineNumber":276,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":277,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":278,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":279,"author":{"gitId":"richiehx"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":280,"author":{"gitId":"richiehx"},"content":"[D][ ] Do CS2103T project (by: 22 September 2023 23:59)","lastModifiedDate":"2023-09-18"},{"lineNumber":281,"author":{"gitId":"richiehx"},"content":"Now you have 2 tasks in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":282,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":283,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":284,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":286,"author":{"gitId":"richiehx"},"content":"### Exiting the program : `bye`","lastModifiedDate":"2023-09-18"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":288,"author":{"gitId":"richiehx"},"content":"Exits the program.","lastModifiedDate":"2023-09-18"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":290,"author":{"gitId":"richiehx"},"content":"Format: `bye`","lastModifiedDate":"2023-09-18"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":292,"author":{"gitId":"richiehx"},"content":"Expected Output:","lastModifiedDate":"2023-09-18"},{"lineNumber":293,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":294,"author":{"gitId":"richiehx"},"content":"Chat has ended! Please Exit.","lastModifiedDate":"2023-09-18"},{"lineNumber":295,"author":{"gitId":"richiehx"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":296,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":297,"author":{"gitId":"richiehx"},"content":"### Saving the data","lastModifiedDate":"2023-09-18"},{"lineNumber":298,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":299,"author":{"gitId":"richiehx"},"content":"AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2023-09-18"},{"lineNumber":300,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":301,"author":{"gitId":"richiehx"},"content":"### Editing the data file","lastModifiedDate":"2023-09-18"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":303,"author":{"gitId":"richiehx"},"content":"AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users can update data directly by editing that data file.","lastModifiedDate":"2023-09-18"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":305,"author":{"gitId":"richiehx"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-warning\"\u003e:exclamation: **Caution:**","lastModifiedDate":"2023-09-18"},{"lineNumber":306,"author":{"gitId":"richiehx"},"content":"If your changes to the data file makes its format invalid, Nano may process the data wrongly and load corrupted data. Hence, it is recommended to take a backup of the file before editing it.","lastModifiedDate":"2023-09-18"},{"lineNumber":307,"author":{"gitId":"richiehx"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":309,"author":{"gitId":"richiehx"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-18"},{"lineNumber":310,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":311,"author":{"gitId":"richiehx"},"content":"## Command summary","lastModifiedDate":"2023-09-18"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":313,"author":{"gitId":"richiehx"},"content":"Action | Format, Examples","lastModifiedDate":"2023-09-18"},{"lineNumber":314,"author":{"gitId":"richiehx"},"content":"--------|------------------","lastModifiedDate":"2023-09-18"},{"lineNumber":315,"author":{"gitId":"richiehx"},"content":"**Add Todo** | `todo DESCRIPTION` \u003cbr\u003e e.g., `todo Watch CS2103T Lecture`","lastModifiedDate":"2023-09-18"},{"lineNumber":316,"author":{"gitId":"richiehx"},"content":"**Add Deadline** | `deadline DESCRIPTION /by DUE_DATE` \u003cbr\u003e e.g., `deadline Do CS2103T project /by 2023-09-22 23:59`","lastModifiedDate":"2023-09-18"},{"lineNumber":317,"author":{"gitId":"richiehx"},"content":"**Add Event** | `event DESCRIPTION /from START_DATE /to END_DATE` \u003cbr\u003e e.g., `Event Watch CS2100 Lecture /from 2023-09-15 16:00 /to 2023-09-15 18:00`","lastModifiedDate":"2023-09-18"},{"lineNumber":318,"author":{"gitId":"richiehx"},"content":"**Mark Task** | `mark INDEX`\u003cbr\u003e e.g., `mark 2`","lastModifiedDate":"2023-09-18"},{"lineNumber":319,"author":{"gitId":"richiehx"},"content":"**Unmark Task** | `unmark INDEX`\u003cbr\u003e e.g., `unmark 2`","lastModifiedDate":"2023-09-18"},{"lineNumber":320,"author":{"gitId":"richiehx"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2023-09-18"},{"lineNumber":321,"author":{"gitId":"richiehx"},"content":"**Edit** | `edit INDEX FIELD_TO_EDIT NEW_VALUE` \u003cbr\u003e e.g.,`edit 2 /desc newDesc`","lastModifiedDate":"2023-09-18"},{"lineNumber":322,"author":{"gitId":"richiehx"},"content":"**Find** | `find KEYWORD`\u003cbr\u003e e.g., `find tutorial`","lastModifiedDate":"2023-09-18"},{"lineNumber":323,"author":{"gitId":"richiehx"},"content":"**List** | `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":324,"author":{"gitId":"richiehx"},"content":"**Exit** | `bye`","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"richiehx":297,"-":27}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" * Duke is a Chatbot that helps you keep track of your tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" * In this version, Duke is renamed to Nano.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * The file path to store the User\u0027s Task Data.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" private static final String FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" * The storage that is used to save and load the user\u0027s tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" * The Message to display when the Chat is Ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" private static final String END_CHAT_MESSAGE \u003d \"Chat has ended! Please Exit.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * The Error Message to display when Invalid command is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_ERROR_MESSAGE \u003d \"I don\u0027t understand what you\u0027re saying.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" * The task list that is used to store the user\u0027s tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" * Boolean value to check if the chat has ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" private boolean isChatEnd \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * Handles the Chatbot Response.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * @param input The raw String data.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" * @return The String response of the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" if (isChatEnd) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" Command command \u003d parseLine.getCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" if (command \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" return INVALID_ERROR_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" case BYE:","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" isChatEnd \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" return END_CHAT_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" case LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" return tasks.formatList();","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" return tasks.handleMarking(parseLine.getArguments(), command.getCommandName());","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" return tasks.handleDelete(parseLine.getArguments());","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" String todoData \u003d parseLine.parseToDoArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" return tasks.handleToDo(todoData);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" String[] deadlineData \u003d parseLine.parseDeadlineArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" return tasks.handleDeadline(deadlineData[0], deadlineData[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" String[] eventData \u003d parseLine.parseEventArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" return tasks.handleEvent(eventData[0], eventData[1], eventData[2]);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" case FIND:","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" String findQuery \u003d parseLine.parseFindQuery();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" return tasks.findTasks(findQuery).formatList();","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" case EDIT:","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" String[] editArgs \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" for (String item : editArgs) {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" System.out.println(item);","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" return tasks.editTask(editArgs[0], editArgs[1], editArgs[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" return INVALID_ERROR_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" * Runs the Chatbot program.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" public void run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" assert !isChatEnd : \"Chat should not be Ended when first run!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" tasks \u003d new TaskList(storage.load(), storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" * Runs the program.","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" new Duke().run();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":130,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"richiehx":127,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":13}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * The Command enum for the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public enum Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" FIND(\"find\"),","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" EDIT(\"edit\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * The String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" private String value;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" * The Constructor for the Command class.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" * @param value The String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" Command(String value) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" this.value \u003d value;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * Returns the respective command of the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" * @param value The input String containing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" * @return The respective command of the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" public static Command getCommand(String value) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" for (Command cmd : Command.values()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" if (cmd.value.equals(value)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" return cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" * Returns the String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * @return The String value of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" public String getCommandName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" return this.value;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"richiehx":55}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * A Checked Exception that is thrown when there is an error in the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" * The Constructor for the Exception class.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * @param message The message given when the Exception is thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"richiehx":16}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" * The Parser to parse input for the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Description is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_DESC_MESSAGE \u003d \"Hey! The task description cannot be empty!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Deadline is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_DEADLINE_MESSAGE \u003d \"Hey, the Deadline given is Invalid! \"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" + \"Make sure that you follow this format:\\n\" + \" \u0027taskDescription /by yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Event is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_EVENT_MESSAGE \u003d \"Hey, the Event given is Invalid!\"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" + \" Make sure that you follow this format:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" + \" \u0027eventDescription /from yyyy-mm-dd HH:mm /to yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Event is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_EDIT_MESSAGE \u003d \"The parameters for the Edit command are Invalid. \"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" + \"Edit only one field at a time!\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" + \"Follow this format:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" + \" \u0027edit taskIndex /fieldToEdit editData\u0027\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" + \"Eg. \u0027edit 4 /desc newTaskTitle\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" * The command parsed from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" private Command command;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" * The arguments parsed from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" private String arguments \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * The Constructor of the Parser.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * @param rawData The data to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" public Parser(String rawData) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" this.command \u003d parseCommand(rawData);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" * Parses the input given to the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * @param rawData Input from the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" * @return The given Command from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if there is no input.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" public Command parseCommand(String rawData) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" String[] commandArray \u003d rawData.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" if (commandArray.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Hey, Type Something!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" } else if (commandArray.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" this.arguments \u003d commandArray[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" return Command.getCommand(commandArray[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" * Returns the command of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" * @return The command of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" public Command getCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" return this.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" * Returns the arguments of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" * @return The arguments of the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" public String getArguments() {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" return this.arguments;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" * Parses the ToDo Arguments from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" * @return The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" public String parseToDoArguments() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" if (arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" return arguments;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" * Parses the find arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":" * @return The arguments of the find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if argument is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" public String parseFindQuery() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" if (arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" return arguments;","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" * Parses the Deadline arguments from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" * @return The String Array containing the description as the first element","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" * and time as the second element.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" public String[] parseDeadlineArguments() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" if (this.arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" String[] arr \u003d this.arguments.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" if (arr.length !\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DEADLINE_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":" return arr;","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":" * Parses the Event arguments from the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":" * @return The String array containing the description as the first element,","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":" * start time as the second element and end time as the third element.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":" public String[] parseEventArguments() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":" if (this.arguments.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_DESC_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":" String[] arr \u003d this.arguments.split(\" /from \");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":" if (arr.length !\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_EVENT_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":" String desc \u003d arr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":" String[] startEnd \u003d arr[1].split(\" /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":" if (startEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_EVENT_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":" String start \u003d startEnd[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":" String end \u003d startEnd[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"richiehx"},"content":" return new String[]{desc, start, end};","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"richiehx"},"content":" * Parses the Edit arguments from the input.","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"richiehx"},"content":" * @return The String array containing the Index of the Task, the Edit Type and the Edit Data.","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the arguments are invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"richiehx"},"content":" public String[] parseEditArguments() throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"richiehx"},"content":" String[] commandArray \u003d arguments.split(\"\\\\s+\", 3);","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"richiehx"},"content":" if (commandArray.length !\u003d 3) {","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_EDIT_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"richiehx"},"content":" String index \u003d commandArray[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"richiehx"},"content":" String editType \u003d commandArray[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"richiehx"},"content":" String editData \u003d commandArray[2];","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"richiehx"},"content":" return new String[]{index, editType, editData};","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"richiehx":189}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * The Storage to read and write from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" * A Temporary storage for reading the Tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" private ArrayList\u003cTask\u003e store \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" * The file path to read and write data from.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" private String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" * The formatter to parse the time of the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter storeTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" * The formatter to format the time of the tasks to store.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" * Constructor for the Storage.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" * @param filePath The file path of the data file to write and read from.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" assert filePath.length() !\u003d 0 : \"File Path should be specified!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" * Saves the data to the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" * @param data The data to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" public void saveData(String data) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" fw.write(data);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" System.out.println(\"Could not save data to storage!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" * Loads the task data from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" * @return The Task List from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if data file is corrupted or not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" // Process file line input","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" String newLine \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" String[] taskComponents \u003d newLine.split(\" \\\\| \");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" String type \u003d taskComponents[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" String isCompleted \u003d taskComponents[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" String desc \u003d taskComponents[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" Task item \u003d new ToDo(taskComponents[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" if (isCompleted.equals(\"X\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" item.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" store.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" if (taskComponents.length \u003c 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Deadline Format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" LocalDateTime buffer \u003d LocalDateTime.parse(taskComponents[3], storeTimeFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" Task item \u003d new Deadline(desc, buffer.format(inputFormatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" if (isCompleted.equals(\"X\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" item.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" store.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" if (taskComponents.length \u003c 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Event Format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" String[] timeComponents \u003d taskComponents[3].split(\"-\", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" if (taskComponents.length \u003c 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Event Format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" LocalDateTime bufferStart \u003d LocalDateTime.parse(timeComponents[0], storeTimeFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" LocalDateTime bufferEnd \u003d LocalDateTime.parse(timeComponents[1], storeTimeFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" Task item \u003d new Event(desc, bufferStart.format(inputFormatter), bufferEnd.format(inputFormatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" if (isCompleted.equals(\"X\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" item.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" store.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"File not Found!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" return store;","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"richiehx":138}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * A task that needs to be done before a specific date/time.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * The date and time of the deadline.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" protected String by;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" * The input formatter to parse Date and Time input.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" * The output formatter to format Date and Time output.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * @param description The description of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * @param date The deadline of the Deadline task. Must follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the deadline does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" public Deadline(String description, String date) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(date, inputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" by \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Deadline time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * Updates the due date of the Deadline Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * @param newDate The new due date.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the deadline does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" public void updateDeadline(String newDate) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(newDate, inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" by \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Deadline time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" return \"D | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.by;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":82}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * A Task that starts at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * The start time of the Event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" protected String start;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" * The end time of the Event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" protected String end;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" * The input formatter to parse Date and Time input.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * The output formatter to format Date and Time output.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" private DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" * Constructor for an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" * @param startTime The start time of the Event task. Must follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" * @param endTime The end time of the Event task. Must follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the times do not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" public Event(String description, String startTime, String endTime) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" LocalDateTime parseStart \u003d LocalDateTime.parse(startTime, inputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" LocalDateTime parseEnd \u003d LocalDateTime.parse(endTime, inputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" start \u003d parseStart.format(outputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" end \u003d parseEnd.format(outputFormatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Event times must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" * Updates the start time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" * @param newDate The new start time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the start time does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" public void updateStart(String newDate) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(newDate, inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" start \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Event Start time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" * Updates the end time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" * @param newDate The new end time of the Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If the end time does not follow the format yyyy-MM-dd HH:mm.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" public void updateEnd(String newDate) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" LocalDateTime d1 \u003d LocalDateTime.parse(newDate, inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" end \u003d d1.format(outputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Event End time must be in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" return \"E | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.start + \"-\" + this.end;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.start + \" to: \" + this.end + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":105}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * A Class to Represent a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" * The description of the Task.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" * The boolean to represent if the Task is Done.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" * Constructor for a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" * Returns the status of the checkbox for the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * @return String [ ] if not done, [X] if done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" * Marks the Task as Done.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" public void markTask() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" * Marks the Task as Not Done.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" * Returns the description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" * @return The description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" * Updates the Description of the Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" * @param newDesc The new description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" public void updateDesc(String newDesc) {","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" System.out.println(newDesc);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" this.description \u003d newDesc;","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String of the Task to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" return this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"richiehx":88}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" * Represents a Task List to store User\u0027s Tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" * The Message to display when Invalid Index is given.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" private static final String INVALID_INDEX_MESSAGE \u003d \"Invalid Task Index provided!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * The ArrayList to represent the Task List.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" * The Storage for the Chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * The Constructor for the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * @param taskList The ArrayList to initialise as the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * @param storage The Storage of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" assert taskList !\u003d null : \"TaskList should be initialised!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" assert storage !\u003d null : \"Storage should be initialised!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" * Formats the Task List to output.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" * @return The formatted task list as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" public String formatList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" String str \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" int len \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" str \u003d str + (i + 1) + \". \" + taskList.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" if (i !\u003d (len - 1)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" str +\u003d \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" return str;","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" * Handles the Marking of the Tasks in the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" * @param commandNum The Index of the Task as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" * @param status The status of the marking as either \u0027mark\u0027 or \u0027unmark\u0027.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If Task Index provided is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" public String handleMarking(String commandNum, String status) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" int index \u003d Integer.parseInt(commandNum) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" String buffer \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" if (index \u003e taskList.size() - 1 || index \u003c 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" Task selectedTask \u003d taskList.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" if (status.equals(\"mark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" selectedTask.markTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" buffer \u003d \"Nice! I\u0027ve marked the task as done:\\n\" + selectedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" } else if (status.equals(\"unmark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" selectedTask.unmarkTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" buffer \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\" + selectedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" return buffer;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" * Formats the return Message for deleting and adding Tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" * @param status The action type of the Message.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" * @param task The task to be added or removed.","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" * @param size The size of the taskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" * @return The formatted String Message.","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":" private String formatMessage(String status, Task task, Integer size) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" String adjTaskWord \u003d \"tasks\";","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" if (size \u003d\u003d 1) {","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" adjTaskWord \u003d \"task\";","lastModifiedDate":"2023-09-18"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" return \"Noted. I\u0027ve \" + status + \" this task:\\n\" + task + \"\\nNow you have \"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" + size + \" \" + adjTaskWord + \" in the list.\";","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":" * Handles the Deleting of a Task from the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" * @param commandNum The Index of the Task as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If Task Index provided is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":" public String handleDelete(String commandNum) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" int index \u003d Integer.parseInt(commandNum) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" if (index \u003e taskList.size() - 1 || index \u003c 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" Task selectedTask \u003d taskList.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"removed\", selectedTask, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":" * Handles the Adding of a ToDo Task to the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":" * @param task The Description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" public String handleToDo(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":" ToDo item \u003d new ToDo(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":" taskList.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"added\", item, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":" * Handles the Adding of a Deadline Task to the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":" * @param desc The Description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":" * @param by The deadline of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if there is an Error in creating the Deadline Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":" public String handleDeadline(String desc, String by) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":" Deadline item \u003d new Deadline(desc, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":" taskList.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"added\", item, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":" * Handles the Adding of an Event Task to the Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":" * @param desc The Description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":" * @param start The start time of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":" * @param end The end time of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"richiehx"},"content":" * @throws DukeException if there is an Error in creating the Event Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"richiehx"},"content":" public String handleEvent(String desc, String start, String end) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"richiehx"},"content":" Event item \u003d new Event(desc, start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"richiehx"},"content":" taskList.add(item);","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"added\", item, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"richiehx"},"content":" * Finds the tasks containing the query and returns a new Task List.","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"richiehx"},"content":" * @param query The query to find the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"richiehx"},"content":" * @return The new Task List containing the tasks that contain the query.","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"richiehx"},"content":" public TaskList findTasks(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"richiehx"},"content":" ArrayList\u003cTask\u003e buffer \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"richiehx"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"richiehx"},"content":" if (task.getDescription().contains(query)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"richiehx"},"content":" buffer.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"richiehx"},"content":" return new TaskList(buffer, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"richiehx"},"content":" * Edits the selected task.","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"richiehx"},"content":" * @param strIndex The Index of the Task in the Task List.","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"richiehx"},"content":" * @param editType The type of Edit to be made. (\"/desc\", \"/by\", \"/from\", \"/to\")","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"richiehx"},"content":" * @param editData The new data.","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"richiehx"},"content":" * @return The Success output as a String.","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"richiehx"},"content":" * @throws DukeException If Task Index provided is invalid or command parameters are invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"richiehx"},"content":" public String editTask(String strIndex, String editType, String editData) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"richiehx"},"content":" Task selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"richiehx"},"content":" int index \u003d Integer.parseInt(strIndex) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"richiehx"},"content":" if (index \u003e taskList.size() - 1 || index \u003c 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"richiehx"},"content":" selectedTask \u003d taskList.get(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"richiehx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"richiehx"},"content":" throw new DukeException(INVALID_INDEX_MESSAGE);","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":213,"author":{"gitId":"richiehx"},"content":" if (selectedTask \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":214,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"No Task Selected!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":215,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":216,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":217,"author":{"gitId":"richiehx"},"content":" if (editType.equals(\"/desc\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":218,"author":{"gitId":"richiehx"},"content":" selectedTask.updateDesc(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"richiehx"},"content":" } else if (editType.equals(\"/by\") \u0026\u0026 selectedTask instanceof Deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":220,"author":{"gitId":"richiehx"},"content":" Deadline buffer \u003d (Deadline) selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":221,"author":{"gitId":"richiehx"},"content":" buffer.updateDeadline(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":222,"author":{"gitId":"richiehx"},"content":" } else if (editType.equals(\"/from\") \u0026\u0026 selectedTask instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":223,"author":{"gitId":"richiehx"},"content":" Event buffer \u003d (Event) selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":224,"author":{"gitId":"richiehx"},"content":" buffer.updateStart(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":225,"author":{"gitId":"richiehx"},"content":" } else if (editType.equals(\"/to\") \u0026\u0026 selectedTask instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":226,"author":{"gitId":"richiehx"},"content":" Event buffer \u003d (Event) selectedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"richiehx"},"content":" buffer.updateEnd(editData);","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"richiehx"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"richiehx"},"content":" throw new DukeException(\"Invalid Edit Command!\\nMake sure that the Task is of the correct type!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"richiehx"},"content":" this.saveList();","lastModifiedDate":"2023-09-17"},{"lineNumber":232,"author":{"gitId":"richiehx"},"content":" return formatMessage(\"updated\", selectedTask, taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"richiehx"},"content":" * Formats the Task List to be saved to Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"richiehx"},"content":" * @return The formatted List as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"richiehx"},"content":" public String exportList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":241,"author":{"gitId":"richiehx"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":242,"author":{"gitId":"richiehx"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":243,"author":{"gitId":"richiehx"},"content":" sb.append(task.exportData()).append(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":244,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":245,"author":{"gitId":"richiehx"},"content":" return sb.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":246,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":247,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":248,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"richiehx"},"content":" * Saves the Task List to the Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"richiehx"},"content":" public void saveList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":252,"author":{"gitId":"richiehx"},"content":" String data \u003d this.exportList();","lastModifiedDate":"2023-08-28"},{"lineNumber":253,"author":{"gitId":"richiehx"},"content":" storage.saveData(data);","lastModifiedDate":"2023-08-28"},{"lineNumber":254,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":255,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":256,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":257,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"richiehx":257}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":" * A Task to be done.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":" * The Constructor for a ToDo Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" * Returns the Formatted String to be saved into Storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" * @return Formatted String representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" public String exportData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" return \"T | \" + this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" * Returns the String representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" * @return String representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":35}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"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":"richiehx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"richiehx"},"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":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":61}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" duke.run();","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" stage.setTitle(\"Nano\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":33}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * Initializes the Main Window for the GUI.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" String input \u003d \"Hello! I\u0027m Nano. What can I do for you?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" DialogBox.getDukeDialog(input, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"richiehx"},"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":48,"author":{"gitId":"richiehx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":60}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":" * Handles User Interface output","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" * The Indentation Level to format text.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" public static final String INDENTATION \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" * Scanner to read user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" * Returns the input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" * @return The input from the user as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" * Formats and Returns the given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" * @param output The raw output to be formatted.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" * @return The formatted output as a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" private static String formatOutput(String output) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" String horizontalLine \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" return INDENTATION + horizontalLine + \"\\n \"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" + INDENTATION + output + \u0027\\n\u0027 + INDENTATION + horizontalLine + \u0027\\n\u0027;","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":" * Prints the Greeting of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" public void printGreeting() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(\"Hello! I\u0027m Nano\\n\" + INDENTATION + \" What can I do for you?\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" * Prints the Goodbye of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" public void printBye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(\"Bye. Hope to see you again soon!\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" * Prints the Invalid Command Output of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" public void printInvalidCommandError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(\"I don\u0027t understand what you\u0027re saying.\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" * Prints the formatted output of the Chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" * @param rawOutput The raw output to be formatted and printed.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" public void printOutput(String rawOutput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" System.out.println(formatOutput(rawOutput));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"richiehx":72}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"richiehx"},"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-06"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" \u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" \u003cCircle centerX\u003d\"49.5\" centerY\u003d\"49.5\" radius\u003d\"49.5\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"richiehx"},"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":"richiehx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"richiehx"},"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":"richiehx"},"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":"richiehx"},"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":"richiehx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"richiehx":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":" public void parseToDoSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"todo boo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":" String actual \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseToDoArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"boo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" public void parseDeadlineSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"deadline boo /by 2001-12-10 11:11\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseDeadlineArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" String expectedName \u003d \"boo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" String expectedBy \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedName, actual[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedBy, actual[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" public void testParseDeadlineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"deadline boo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" parseLine.parseDeadlineArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Hey, the Deadline given is Invalid! \"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" + \"Make sure that you follow this format:\\n\" + \" \u0027taskDescription /by yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public void parseEventSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"event boo /from 2001-12-10 11:11 /to 2001-12-10 11:12\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEventArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" String expectedName \u003d \"boo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" String expectedFrom \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" String expectedTo \u003d \"2001-12-10 11:12\";","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedName, actual[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedFrom, actual[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedTo, actual[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" public void testParseEventError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"event boo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" parseLine.parseEventArguments();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Hey, the Event given is Invalid!\"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" + \" Make sure that you follow this format:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":" + \" \u0027eventDescription /from yyyy-mm-dd HH:mm /to yyyy-mm-dd HH:mm\u0027\";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"richiehx"},"content":" public void parseEditToDoSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /desc boo\");","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"richiehx"},"content":" String expectedDesc \u003d \"boo\";","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedDesc, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"richiehx"},"content":" public void parseEditDeadlineDescSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /desc boo\");","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"richiehx"},"content":" String expectedDesc \u003d \"boo\";","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedDesc, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"richiehx"},"content":" public void parseEditDeadlineBySuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /by 2001-12-10 11:11\");","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"richiehx"},"content":" String expectedBy \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedBy, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"richiehx"},"content":" public void parseEditEventFromSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /from 2001-12-10 11:11\");","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"richiehx"},"content":" String expectedFrom \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedFrom, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"richiehx"},"content":" public void parseEditEventToSuccess() {","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"richiehx"},"content":" Parser parseLine \u003d new Parser(\"edit 5 /to 2001-12-10 11:11\");","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"richiehx"},"content":" String[] actual \u003d {};","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"richiehx"},"content":" actual \u003d parseLine.parseEditArguments();","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"richiehx"},"content":" fail(\"parse failure\");","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"richiehx"},"content":" String expectedIndex \u003d \"5\";","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"richiehx"},"content":" String expectedTo \u003d \"2001-12-10 11:11\";","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedIndex, actual[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"richiehx"},"content":" assertEquals(expectedTo, actual[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"richiehx":165}},{"path":"src/test/java/duke/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"richiehx"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"richiehx"},"content":" public void testAddToDoSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"richiehx"},"content":" String actual \u003d testList.handleToDo(\"test desc\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Noted. I\u0027ve added this task:\\n\" + \"[T][ ] test desc\" + \"\\nNow you have \"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"richiehx"},"content":" + 1 + \" task in the list.\";","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"richiehx"},"content":" public void testAddDeadlineSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"richiehx"},"content":" String actual \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"richiehx"},"content":" actual \u003d testList.handleDeadline(\"boo\", \"2001-10-22 11:12\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"richiehx"},"content":" fail(\"Did not add Deadline successfully\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Noted. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"richiehx"},"content":" + \"[D][ ] boo (by: 22 October 2001 11:12)\" + \"\\nNow you have \"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"richiehx"},"content":" + 1 + \" task in the list.\";","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"richiehx"},"content":" public void testAddDeadlineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"richiehx"},"content":" testList.handleDeadline(\"boo\", \"2001-10-22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Deadline time must be in this format: yyyy-mm-dd HH:mm\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"richiehx"},"content":" public void testAddEventSuccess() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"richiehx"},"content":" String actual \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"richiehx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"richiehx"},"content":" actual \u003d testList.handleEvent(\"boo\", \"2001-10-22 11:12\", \"2001-11-22 11:12\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"richiehx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"richiehx"},"content":" fail(\"Did not add Event successfully\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Noted. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"richiehx"},"content":" + \"[E][ ] boo (from: 22 October 2001 11:12 to: 22 November 2001 11:12)\"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"richiehx"},"content":" + \"\\nNow you have \" + 1 + \" task in the list.\";","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"richiehx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"richiehx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"richiehx"},"content":" public void testAddEventError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"richiehx"},"content":" Storage storage \u003d new Storage(\"data/test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"richiehx"},"content":" TaskList testList \u003d new TaskList(new ArrayList\u003c\u003e(), storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"richiehx"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"richiehx"},"content":" testList.handleEvent(\"boo\", \"2001-10-22 11:12\", \"2001-11-22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"richiehx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"richiehx"},"content":" String expected \u003d \"Event times must be in this format: yyyy-mm-dd HH:mm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"richiehx"},"content":" assertEquals(expected, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"richiehx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"richiehx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"richiehx":81}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"T | | boo1","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"D | | return book | 01 December 2021 11:11","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"E | | project meeting | 01 December 2021 11:11-01 December 2021 11:12","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"richiehx":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"richiehx"},"content":"todo boo1","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"richiehx"},"content":"todo boo2","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"richiehx"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"richiehx"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"richiehx"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"richiehx"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"richiehx"},"content":"delete 2","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"richiehx"},"content":"deadline return book /by 2021-12-01 11:11","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"richiehx"},"content":"event project meeting /from 2021-12-01 11:11 /to 2021-12-01 11:12","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"richiehx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"richiehx"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"richiehx"},"content":"delete 2","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"richiehx"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"richiehx":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":"richiehx"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-31"},{"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":"richiehx"},"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":{"richiehx":2,"-":19}}] diff --git a/richiehx_ip_master/commits.json b/richiehx_ip_master/commits.json index 4cd80ef1..7dcd2bf3 100644 --- a/richiehx_ip_master/commits.json +++ b/richiehx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"richiehx":[{"date":"2023-08-22","commitResults":[{"hash":"1f313568dc7decf9528fd2b8a896550cf422cb13","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"ec7fffa58f3dbc028b48232a356eaf4f0cfb0bc9","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":4}}},{"hash":"bea844b7b4c1fcb1600e72ea22f5edeeb7c1f3a7","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":7}}},{"hash":"2b4ae8185d17ad283f29f9082396dabfa96aee02","isMergeCommit":false,"messageTitle":"Completed Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":7}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e8f4519946ce26a9c716546d909279185ca799c2","isMergeCommit":false,"messageTitle":"Completed Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":22}}},{"hash":"d08a58244212766b70f08bae597bc34597217796","isMergeCommit":false,"messageTitle":"Completed Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":7,"deletions":10}}},{"hash":"ccf2bde821633288b984f10e6005594fe004d27d","isMergeCommit":false,"messageTitle":"Completed Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":43}}},{"hash":"38f1a2b4d73c44a4e249fddec1c8af06db9ad9b5","isMergeCommit":false,"messageTitle":"Completed Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9073c5b4aeb4290a77f6b5dd786d8d0b353da5a3","isMergeCommit":false,"messageTitle":"Fixed bug when entering strings as index for mark/unmark and delete commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":19}}},{"hash":"2a6f0d067543b116d332476af955d2180ecc4122","isMergeCommit":false,"messageTitle":"Refactored code to use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":33}}}]},{"date":"2023-08-25","commitResults":[{"hash":"65b1cae4a8bd48809c9225c2165fd9f4e7fe5e34","isMergeCommit":false,"messageTitle":"Changed test files due to change of output","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"92a530740730a05d5956409cd48592c7093162b6","isMergeCommit":false,"messageTitle":"Add File Save and Read functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":5}}},{"hash":"ee3e5be91bf3dc81b8852371aafe447c4a700d91","isMergeCommit":false,"messageTitle":"Complete Level 7 and Refactor Code into TaskList and Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":155}}},{"hash":"602003b7a9fdf860809395999af5769c2df6862d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"5d2376a2282cee1f1e8c8d79f0c0d553ad676a78","isMergeCommit":false,"messageTitle":"Refactor Code into Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":88}}},{"hash":"8cd66608d8a850b84e1e2ebf0b984214b0e55313","isMergeCommit":false,"messageTitle":"Complete Level 8 and Add Date parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"d9163254e14fb889fc741c989f171801bf78d21f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"3309c79f0c54955be4855c10f6162f703927e869","isMergeCommit":false,"messageTitle":"Refactor Code and Added Ui class for more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":47}}},{"hash":"bde222e3c6132bb7ce3a28c133dff0e1e481ae76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"108c47a47b21a7f2ff11cd2cc4b977af484db78e","isMergeCommit":false,"messageTitle":"Refactor files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":17},"bat":{"insertions":1,"deletions":1},"md":{"insertions":13,"deletions":8}}},{"hash":"c09a1d815a6a99a58290140b0bf7167ce9f94797","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cfa537818f73c528f4807a670a23ca50cee754bb","isMergeCommit":false,"messageTitle":"Fix bug from Storage Constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"691958c503e8c1323e5d6166d13e7163b3a5c598","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"46a0062a07b3e409b1ad4cb392252513844bbf39","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/richiehx/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"776607e73b269c943a32527fcd45c2c400409616","isMergeCommit":false,"messageTitle":"Use Gradle to build and run and Fix Text for tasks","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":9,"deletions":3},"java":{"insertions":5,"deletions":6},"bat":{"insertions":1,"deletions":1}}},{"hash":"7c41864a8bcdb5b49504f5c58eaf4dfa8cbbd2f2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7ce74067ace21423d2df77fc29fe0ace070597f3","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":164,"deletions":3}}},{"hash":"c4e91604d03e562abcdece469c4bbd4e8485f9a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b024da467b908acf1130107a9ea0d8edc9d78fe3","isMergeCommit":false,"messageTitle":"Complete A-Jar","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":5}}},{"hash":"ebc550a1cbaa6f4c79e967f923247704da73702e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"e0dd2c7188a73cd0d3d8716ce009869ff2fa28a9","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":338,"deletions":7}}},{"hash":"b4ec6539d1df0afa7a85b0f32ab4ba3d241c7866","isMergeCommit":false,"messageTitle":"Modify files for Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"8db01edf36d6dd2993999d129e68bed8d7bf508c","isMergeCommit":false,"messageTitle":"Add Find Functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":1}}},{"hash":"a3d005a33b0be41d314f1019619f3d20b5829eb9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2bf695bd3809d9f859b0a9ff0f118306d08d990d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c98562518ea8819853f951fba54e182d712f7a04","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"f206a9f780a39eed140b416e536a03a0f2717ea0","isMergeCommit":false,"messageTitle":"Add Files for the Gui","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":288,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"e94a681bcc50602d5eef53c8fb92def931319058","isMergeCommit":false,"messageTitle":"Complete Level 10 of the Chatbot","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":8,"deletions":4},"java":{"insertions":78,"deletions":225}}},{"hash":"8fe78f9523ed14a2cd296ca560787654061e8709","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"48b6c5c30da6ea45e7be0560b1ec06acd1b8f1fe","isMergeCommit":false,"messageTitle":"Add checkstyle and Fix violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":144,"deletions":108}}},{"hash":"ff97a28ae2a88c9adc4d655721e693d5bf3cc760","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"72716a9575a968ca47b62f4e596525602a5da0aa","isMergeCommit":false,"messageTitle":"Fix files for building","messageBody":"","tags":["v0.2"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":30,"deletions":21}}}]},{"date":"2023-09-10","commitResults":[{"hash":"88a8f836d97641cbae8a0bc6585a1afad1ccf150","isMergeCommit":false,"messageTitle":"Fix files for building","messageBody":"Gradle is not building the files correctly due to the wrong\nmainClass set and the checkstyle errors being thrown.\n\nModifications are required to allow Gradle to build the files\nproperly and bundle them into a JAR file.\n\nLet\u0027s,\n* modify the build.gradle file to use the correct mainClass.\n* update the test files to conform to the checkstyle.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":30,"deletions":21}}},{"hash":"516223e3bd3b9325bd3c7064d9aca3771a147483","isMergeCommit":false,"messageTitle":"Implement Assertions","messageBody":"No assertions to check for Developer errors in code.\n\nAssertions help to define assumptions about the program state so\nthat the runtime can verify them.\n\nLet\u0027s add assertions to detect possible bugs in the code.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"3fa678e2141f0bd6cb505ba379ff63f184949ccc","isMergeCommit":false,"messageTitle":"Refactor files to Improve Code Quality","messageBody":"Files do not have the suggested Code Quality.\n\nBetter Code Quality will help with Readability of the Code.\n\nLet\u0027s refactor the files to follow the suggested Code Quality\nimprovements.\n","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":21}}},{"hash":"947ffcdadf7406ea4dbc12b54f7d739655fbfb1e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from richiehx/branch-A-Assertions","messageBody":"Implement Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5d680c75d1415a4dd374965cfade70c8eab3472e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d1d699f4e328c29c6ca1017430a261c07325a0d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from richiehx/branch-A-CodeQuality","messageBody":"Refactor files to Improve Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"2b0d2fd0d9d1c34f9b6828559f49914b4ebb8918","isMergeCommit":true,"messageTitle":"Merge pull request #3 from richiehx/branch-A-CI","messageBody":"Set up Continuous Integration","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"2db1e764c152d8a834020cee37a54fa8fd2d4c77","isMergeCommit":false,"messageTitle":"Add Edit Functionality","messageBody":"Edit command to edit tasks in Task List.\n\nNo method to edit tasks in Task List.\n\nLet\u0027s add an Edit method to Edit tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":232,"deletions":21}}},{"hash":"923c27621d6ed90477af2bc69afd8b2a2592cbd7","isMergeCommit":false,"messageTitle":"Fix code to conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":15}}},{"hash":"cc83967d833db7ac38b82a32fe3b9975de1d96f6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from richiehx/branch-C-Update","messageBody":"Add Edit Functionality","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-17","commitResults":[{"hash":"b458367188db1c7f0957c5164bcd1de5df96afc5","isMergeCommit":false,"messageTitle":"Improve Nano User and Bot Images","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":7,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"86bb42522ed8bb38047f6008fec70598694532db","isMergeCommit":true,"messageTitle":"Merge pull request #6 from richiehx/branch-A-BetterGui","messageBody":"Improve Nano User and Bot Images","fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"5c039120249a4daf49037186f9006f01bd802dcb","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":209,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"richiehx":{"java":1573,"md":219,"fxml":45,"sh":0,"bat":2,"gradle":21,"txt":16}},"authorContributionVariance":{"richiehx":29046.63},"authorDisplayNameMap":{"richiehx":"CS2103T-T11-3 RICH..SIEH"}} +{"authorDailyContributionsMap":{"richiehx":[{"date":"2023-08-22","commitResults":[{"hash":"1f313568dc7decf9528fd2b8a896550cf422cb13","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"ec7fffa58f3dbc028b48232a356eaf4f0cfb0bc9","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":4}}},{"hash":"bea844b7b4c1fcb1600e72ea22f5edeeb7c1f3a7","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":7}}},{"hash":"2b4ae8185d17ad283f29f9082396dabfa96aee02","isMergeCommit":false,"messageTitle":"Completed Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":7}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e8f4519946ce26a9c716546d909279185ca799c2","isMergeCommit":false,"messageTitle":"Completed Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":22}}},{"hash":"d08a58244212766b70f08bae597bc34597217796","isMergeCommit":false,"messageTitle":"Completed Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":7,"deletions":10}}},{"hash":"ccf2bde821633288b984f10e6005594fe004d27d","isMergeCommit":false,"messageTitle":"Completed Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":43}}},{"hash":"38f1a2b4d73c44a4e249fddec1c8af06db9ad9b5","isMergeCommit":false,"messageTitle":"Completed Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9073c5b4aeb4290a77f6b5dd786d8d0b353da5a3","isMergeCommit":false,"messageTitle":"Fixed bug when entering strings as index for mark/unmark and delete commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":19}}},{"hash":"2a6f0d067543b116d332476af955d2180ecc4122","isMergeCommit":false,"messageTitle":"Refactored code to use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":33}}}]},{"date":"2023-08-25","commitResults":[{"hash":"65b1cae4a8bd48809c9225c2165fd9f4e7fe5e34","isMergeCommit":false,"messageTitle":"Changed test files due to change of output","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"92a530740730a05d5956409cd48592c7093162b6","isMergeCommit":false,"messageTitle":"Add File Save and Read functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":5}}},{"hash":"ee3e5be91bf3dc81b8852371aafe447c4a700d91","isMergeCommit":false,"messageTitle":"Complete Level 7 and Refactor Code into TaskList and Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":155}}},{"hash":"602003b7a9fdf860809395999af5769c2df6862d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"5d2376a2282cee1f1e8c8d79f0c0d553ad676a78","isMergeCommit":false,"messageTitle":"Refactor Code into Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":88}}},{"hash":"8cd66608d8a850b84e1e2ebf0b984214b0e55313","isMergeCommit":false,"messageTitle":"Complete Level 8 and Add Date parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"d9163254e14fb889fc741c989f171801bf78d21f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"3309c79f0c54955be4855c10f6162f703927e869","isMergeCommit":false,"messageTitle":"Refactor Code and Added Ui class for more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":47}}},{"hash":"bde222e3c6132bb7ce3a28c133dff0e1e481ae76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"108c47a47b21a7f2ff11cd2cc4b977af484db78e","isMergeCommit":false,"messageTitle":"Refactor files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":17},"bat":{"insertions":1,"deletions":1},"md":{"insertions":13,"deletions":8}}},{"hash":"c09a1d815a6a99a58290140b0bf7167ce9f94797","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cfa537818f73c528f4807a670a23ca50cee754bb","isMergeCommit":false,"messageTitle":"Fix bug from Storage Constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"691958c503e8c1323e5d6166d13e7163b3a5c598","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"46a0062a07b3e409b1ad4cb392252513844bbf39","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/richiehx/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"776607e73b269c943a32527fcd45c2c400409616","isMergeCommit":false,"messageTitle":"Use Gradle to build and run and Fix Text for tasks","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":9,"deletions":3},"java":{"insertions":5,"deletions":6},"bat":{"insertions":1,"deletions":1}}},{"hash":"7c41864a8bcdb5b49504f5c58eaf4dfa8cbbd2f2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7ce74067ace21423d2df77fc29fe0ace070597f3","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":164,"deletions":3}}},{"hash":"c4e91604d03e562abcdece469c4bbd4e8485f9a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b024da467b908acf1130107a9ea0d8edc9d78fe3","isMergeCommit":false,"messageTitle":"Complete A-Jar","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":5}}},{"hash":"ebc550a1cbaa6f4c79e967f923247704da73702e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"e0dd2c7188a73cd0d3d8716ce009869ff2fa28a9","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":338,"deletions":7}}},{"hash":"b4ec6539d1df0afa7a85b0f32ab4ba3d241c7866","isMergeCommit":false,"messageTitle":"Modify files for Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"8db01edf36d6dd2993999d129e68bed8d7bf508c","isMergeCommit":false,"messageTitle":"Add Find Functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":1}}},{"hash":"a3d005a33b0be41d314f1019619f3d20b5829eb9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2bf695bd3809d9f859b0a9ff0f118306d08d990d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c98562518ea8819853f951fba54e182d712f7a04","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"f206a9f780a39eed140b416e536a03a0f2717ea0","isMergeCommit":false,"messageTitle":"Add Files for the Gui","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":288,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"e94a681bcc50602d5eef53c8fb92def931319058","isMergeCommit":false,"messageTitle":"Complete Level 10 of the Chatbot","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":8,"deletions":4},"java":{"insertions":78,"deletions":225}}},{"hash":"8fe78f9523ed14a2cd296ca560787654061e8709","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"48b6c5c30da6ea45e7be0560b1ec06acd1b8f1fe","isMergeCommit":false,"messageTitle":"Add checkstyle and Fix violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":144,"deletions":108}}},{"hash":"ff97a28ae2a88c9adc4d655721e693d5bf3cc760","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"72716a9575a968ca47b62f4e596525602a5da0aa","isMergeCommit":false,"messageTitle":"Fix files for building","messageBody":"","tags":["v0.2"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":30,"deletions":21}}}]},{"date":"2023-09-10","commitResults":[{"hash":"88a8f836d97641cbae8a0bc6585a1afad1ccf150","isMergeCommit":false,"messageTitle":"Fix files for building","messageBody":"Gradle is not building the files correctly due to the wrong\nmainClass set and the checkstyle errors being thrown.\n\nModifications are required to allow Gradle to build the files\nproperly and bundle them into a JAR file.\n\nLet\u0027s,\n* modify the build.gradle file to use the correct mainClass.\n* update the test files to conform to the checkstyle.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":30,"deletions":21}}},{"hash":"516223e3bd3b9325bd3c7064d9aca3771a147483","isMergeCommit":false,"messageTitle":"Implement Assertions","messageBody":"No assertions to check for Developer errors in code.\n\nAssertions help to define assumptions about the program state so\nthat the runtime can verify them.\n\nLet\u0027s add assertions to detect possible bugs in the code.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"3fa678e2141f0bd6cb505ba379ff63f184949ccc","isMergeCommit":false,"messageTitle":"Refactor files to Improve Code Quality","messageBody":"Files do not have the suggested Code Quality.\n\nBetter Code Quality will help with Readability of the Code.\n\nLet\u0027s refactor the files to follow the suggested Code Quality\nimprovements.\n","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":21}}},{"hash":"947ffcdadf7406ea4dbc12b54f7d739655fbfb1e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from richiehx/branch-A-Assertions","messageBody":"Implement Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5d680c75d1415a4dd374965cfade70c8eab3472e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d1d699f4e328c29c6ca1017430a261c07325a0d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from richiehx/branch-A-CodeQuality","messageBody":"Refactor files to Improve Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"2b0d2fd0d9d1c34f9b6828559f49914b4ebb8918","isMergeCommit":true,"messageTitle":"Merge pull request #3 from richiehx/branch-A-CI","messageBody":"Set up Continuous Integration","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"2db1e764c152d8a834020cee37a54fa8fd2d4c77","isMergeCommit":false,"messageTitle":"Add Edit Functionality","messageBody":"Edit command to edit tasks in Task List.\n\nNo method to edit tasks in Task List.\n\nLet\u0027s add an Edit method to Edit tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":232,"deletions":21}}},{"hash":"923c27621d6ed90477af2bc69afd8b2a2592cbd7","isMergeCommit":false,"messageTitle":"Fix code to conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":15}}},{"hash":"cc83967d833db7ac38b82a32fe3b9975de1d96f6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from richiehx/branch-C-Update","messageBody":"Add Edit Functionality","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-17","commitResults":[{"hash":"b458367188db1c7f0957c5164bcd1de5df96afc5","isMergeCommit":false,"messageTitle":"Improve Nano User and Bot Images","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":7,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"86bb42522ed8bb38047f6008fec70598694532db","isMergeCommit":true,"messageTitle":"Merge pull request #6 from richiehx/branch-A-BetterGui","messageBody":"Improve Nano User and Bot Images","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"5c039120249a4daf49037186f9006f01bd802dcb","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":209,"deletions":15}}},{"hash":"dc3a9271ae781526d82178ec7f96167e80acce99","isMergeCommit":false,"messageTitle":"Edit User Guide","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3},"md":{"insertions":124,"deletions":23}}},{"hash":"1ae8733bcd42a1dfbbf753a96b09486846adebb2","isMergeCommit":false,"messageTitle":"Fix Tests from modifying display message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"3ec157fdb3b5b5e389d4dabdbb23bbe9387f60bf","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"866c553da8ef1b9dd5b23f1ee5c90c1da3b05919","isMergeCommit":true,"messageTitle":"Merge pull request #7 from richiehx/branch-A-UserGuide","messageBody":"Edit User Guide","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"richiehx":{"java":1577,"md":307,"fxml":45,"sh":0,"bat":2,"gradle":21,"txt":16}},"authorContributionVariance":{"richiehx":30950.744},"authorDisplayNameMap":{"richiehx":"CS2103T-T11-3 RICH..SIEH"}} diff --git a/ruiyangzh_ip_master/authorship.json b/ruiyangzh_ip_master/authorship.json index e1853de7..befa6a8a 100644 --- a/ruiyangzh_ip_master/authorship.json +++ b/ruiyangzh_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"# duke project template","lastModifiedDate":"2023-09-01"},{"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":"ruiyangzh"},"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":"2023-09-01"},{"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":{"ruiyangzh":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":"ruiyangzh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"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":"ruiyangzh"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" apply plugin: \u0027idea\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"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":"ruiyangzh"},"content":"idea {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" module {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" inheritOutputDirs \u003d true","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" version \u003d \"16\"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"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":"ruiyangzh"},"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":"-"},"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":"ruiyangzh"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ruiyangzh":29,"-":40}},{"path":"data/corruptedStorage.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"hjgkjafdbnhd","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"dfhdjkfdhf","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"sdefhjdsa,fmdsanf","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"adjkbaLFDHAELIUREQWYREHDQW","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"# Luke User Guide ","lastModifiedDate":"2023-09-17"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"##### for v0.2.0-limited-release","lastModifiedDate":"2023-09-17"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"**~Luke~** is a chatbot built upon the basic template of Duke, ","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"with a **CLI** (*Command Line Interface*) design. The chatbot is","lastModifiedDate":"2023-09-17"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"designed to help manage tasks in an easy-to-use format.","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"### Add tasks to a list","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"Luke saves lists to a file, allowing you to carry over information","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"across different sessions.","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"### Categorize and mark tasks","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"Luke allows you to use different types of tasks to manage them better, or","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"mark them to indicate completion.","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"### User-friendly","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":"Luke provides **help interfaces** to guide new users, and allows ","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"**rebinding of commands** for advanced users who want","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"to save keystrokes when typing.","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":"## Quickstart","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"### To use:","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":"1. Ensure you have Java 11 or above installed in your Computer.","lastModifiedDate":"2023-09-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":"2. Download the latest duke.jar release. (Check that the user guide is also of the same version!)","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":"3. Copy the file to the folder you want to use as the home folder for your Luke chatbot.","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":"4. Double-click to start the bot!","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":"### On startup:","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":"The bot will on startup create a folder named `data` in the directory ","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":"that the .jar file is placed in, to save tasks to a file.","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":"Thereafter, the bot will display a short introductory message and show its logo.","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":"### General commands","lastModifiedDate":"2023-09-17"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":"#### `help` - Provides a help message","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":"Displays a help message containing all the commands, the syntax to use them, and","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"their functionalities.","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":"Also provides a link to this page, and the current version.","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"Format: `help`","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":"#### `list` - Displays the current list","lastModifiedDate":"2023-09-17"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":"Displays the current list and its contents.","lastModifiedDate":"2023-09-17"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"Format: `list`","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":"2. [D][X] Submit CS2103 IP (by: Sep 22 2023)","lastModifiedDate":"2023-09-17"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":"3. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":"#### \u0027bye\u0027 - Shuts down the bot","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":"This calls the bot to shut down and close the interface.","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":"Format: `bye`","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":"### Task addition and deletion","lastModifiedDate":"2023-09-17"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":"For all task types, names can contain spaces, but **_cannot_**","lastModifiedDate":"2023-09-17"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":"contain the delimiter `%!%`, since this is used in the file format when tasks are saved.","lastModifiedDate":"2023-09-17"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":"Dates **_must_** be written in the format `YYYY-MM-DD`.","lastModifiedDate":"2023-09-17"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":"Tasks all have an associated name, and a complete/incomplete status.","lastModifiedDate":"2023-09-17"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":"#### `todo` - Adds a todo task ","lastModifiedDate":"2023-09-17"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":"Adds a todo task with its name to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":"Format: `todo (String name)`","lastModifiedDate":"2023-09-17"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":"Todos are a form of task with only a name.","lastModifiedDate":"2023-09-17"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":"todo Buy Groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":"Added the task [T][] Buy Groceries to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":"#### `deadline` - Adds a deadline task","lastModifiedDate":"2023-09-17"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":"Adds a deadline task to the list with its name and due date.","lastModifiedDate":"2023-09-17"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":"Format: `deadline (String name) /by (Date deadline)`","lastModifiedDate":"2023-09-17"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":"Deadlines are a class of task that have a deadline associated with them.","lastModifiedDate":"2023-09-17"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":"deadline Submit CS2103 IP /by 2023-09-22","lastModifiedDate":"2023-09-17"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":"Added the task [D][] Submit CS2103 IP (by: Sep 22 2023) to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":"#### `event` - Adds an event task","lastModifiedDate":"2023-09-17"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":"Adds an event task to the list with its name, start and end dates.","lastModifiedDate":"2023-09-17"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":"Format: `event (String name) /from (Date start) /to (Date end)`","lastModifiedDate":"2023-09-17"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":"Events are a class of task that lasts from one date to another.","lastModifiedDate":"2023-09-17"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":"event Go on SEP, hopefully /from 2024-08-12 /to 2025-01-12","lastModifiedDate":"2023-09-17"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":"Added the task [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025) to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":105,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":"#### `delete` - Deletes the indicated task","lastModifiedDate":"2023-09-17"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":"Deletes the task as indicated by the index.","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":"Format: `delete (int index)`","lastModifiedDate":"2023-09-17"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":"If the index is not an integer or is an invalid index, the bot will inform the user.","lastModifiedDate":"2023-09-17"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":"delete 1","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":"deleted task indexed at 1 successfully","lastModifiedDate":"2023-09-17"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":"delete -1","lastModifiedDate":"2023-09-17"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Out of list index","lastModifiedDate":"2023-09-17"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":"#### `clear` - Clears the list","lastModifiedDate":"2023-09-17"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":"Clears all tasks from the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":"Format: `clear`","lastModifiedDate":"2023-09-17"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":"clear ","lastModifiedDate":"2023-09-17"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":144,"author":{"gitId":"ruiyangzh"},"content":"Cleared!","lastModifiedDate":"2023-09-17"},{"lineNumber":145,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":146,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":147,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":148,"author":{"gitId":"ruiyangzh"},"content":"No tasks, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":149,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":150,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":151,"author":{"gitId":"ruiyangzh"},"content":"### Marking and unmarking","lastModifiedDate":"2023-09-17"},{"lineNumber":152,"author":{"gitId":"ruiyangzh"},"content":"#### `mark` - mark the indicated task","lastModifiedDate":"2023-09-17"},{"lineNumber":153,"author":{"gitId":"ruiyangzh"},"content":"Marks the task as indicated by the index.","lastModifiedDate":"2023-09-17"},{"lineNumber":154,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":155,"author":{"gitId":"ruiyangzh"},"content":"Format: `mark (int index)`","lastModifiedDate":"2023-09-17"},{"lineNumber":156,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":157,"author":{"gitId":"ruiyangzh"},"content":"If the index is not an integer or is an invalid index, the bot will inform the user.","lastModifiedDate":"2023-09-17"},{"lineNumber":158,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":159,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":160,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":161,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":162,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":163,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":164,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":165,"author":{"gitId":"ruiyangzh"},"content":"mark 1","lastModifiedDate":"2023-09-17"},{"lineNumber":166,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":167,"author":{"gitId":"ruiyangzh"},"content":"marked task 1","lastModifiedDate":"2023-09-17"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":169,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":171,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":172,"author":{"gitId":"ruiyangzh"},"content":"1. [T][X] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":173,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":174,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":175,"author":{"gitId":"ruiyangzh"},"content":"mark -1","lastModifiedDate":"2023-09-17"},{"lineNumber":176,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":177,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Out of list index","lastModifiedDate":"2023-09-17"},{"lineNumber":178,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":179,"author":{"gitId":"ruiyangzh"},"content":"#### `unmark` - unmarks the indicated task","lastModifiedDate":"2023-09-17"},{"lineNumber":180,"author":{"gitId":"ruiyangzh"},"content":"Unmarks the task as indicated by the index.","lastModifiedDate":"2023-09-17"},{"lineNumber":181,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":182,"author":{"gitId":"ruiyangzh"},"content":"Format: `unmark (int index)`","lastModifiedDate":"2023-09-17"},{"lineNumber":183,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":184,"author":{"gitId":"ruiyangzh"},"content":"If the index is not an integer or is an invalid index, the bot will inform the user.","lastModifiedDate":"2023-09-17"},{"lineNumber":185,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":186,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":187,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":188,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":189,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":190,"author":{"gitId":"ruiyangzh"},"content":"1. [T][X] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":191,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":192,"author":{"gitId":"ruiyangzh"},"content":"unmark 1","lastModifiedDate":"2023-09-17"},{"lineNumber":193,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":194,"author":{"gitId":"ruiyangzh"},"content":"unmarked task 1","lastModifiedDate":"2023-09-17"},{"lineNumber":195,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":196,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":197,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":198,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":199,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":200,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":201,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":202,"author":{"gitId":"ruiyangzh"},"content":"unmark -1","lastModifiedDate":"2023-09-17"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":204,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Out of list index","lastModifiedDate":"2023-09-17"},{"lineNumber":205,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":206,"author":{"gitId":"ruiyangzh"},"content":"### Utility and convenience commands","lastModifiedDate":"2023-09-17"},{"lineNumber":207,"author":{"gitId":"ruiyangzh"},"content":"#### `find` - finds tasks with matching terms","lastModifiedDate":"2023-09-17"},{"lineNumber":208,"author":{"gitId":"ruiyangzh"},"content":"Searches the tasklist for tasks that match the keyword as indicated.","lastModifiedDate":"2023-09-17"},{"lineNumber":209,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":210,"author":{"gitId":"ruiyangzh"},"content":"Format: `find (String keyword)`","lastModifiedDate":"2023-09-17"},{"lineNumber":211,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":212,"author":{"gitId":"ruiyangzh"},"content":"The search function discriminates between uppercase and lowercase. ","lastModifiedDate":"2023-09-17"},{"lineNumber":213,"author":{"gitId":"ruiyangzh"},"content":"Tasks are searched as according to their user interface representations","lastModifiedDate":"2023-09-17"},{"lineNumber":214,"author":{"gitId":"ruiyangzh"},"content":"(i.e. when you display them as in the command `list`).","lastModifiedDate":"2023-09-17"},{"lineNumber":215,"author":{"gitId":"ruiyangzh"},"content":"The indexes returned do not indicate their index in the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":216,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":217,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":219,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":220,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":221,"author":{"gitId":"ruiyangzh"},"content":"2. [D][X] Submit CS2103 IP (by: Sep 22 2023)","lastModifiedDate":"2023-09-17"},{"lineNumber":222,"author":{"gitId":"ruiyangzh"},"content":"3. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":224,"author":{"gitId":"ruiyangzh"},"content":"find Sub","lastModifiedDate":"2023-09-17"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":226,"author":{"gitId":"ruiyangzh"},"content":"Here are the matching items. ","lastModifiedDate":"2023-09-17"},{"lineNumber":227,"author":{"gitId":"ruiyangzh"},"content":"1. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":229,"author":{"gitId":"ruiyangzh"},"content":"find [X]","lastModifiedDate":"2023-09-17"},{"lineNumber":230,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":231,"author":{"gitId":"ruiyangzh"},"content":"Here are the matching items. ","lastModifiedDate":"2023-09-17"},{"lineNumber":232,"author":{"gitId":"ruiyangzh"},"content":"1. [D][X] Submit CS2103 IP (by: Sep 22 2023)","lastModifiedDate":"2023-09-17"},{"lineNumber":233,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":234,"author":{"gitId":"ruiyangzh"},"content":"find Sep 22","lastModifiedDate":"2023-09-17"},{"lineNumber":235,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":236,"author":{"gitId":"ruiyangzh"},"content":"Here are the matching items. ","lastModifiedDate":"2023-09-17"},{"lineNumber":237,"author":{"gitId":"ruiyangzh"},"content":"1. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":238,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":239,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":240,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":241,"author":{"gitId":"ruiyangzh"},"content":"find Buy Bananas","lastModifiedDate":"2023-09-17"},{"lineNumber":242,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":243,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Could not find task","lastModifiedDate":"2023-09-17"},{"lineNumber":244,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":245,"author":{"gitId":"ruiyangzh"},"content":"find 2024-09-12","lastModifiedDate":"2023-09-17"},{"lineNumber":246,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":247,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Could not find task","lastModifiedDate":"2023-09-17"},{"lineNumber":248,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":249,"author":{"gitId":"ruiyangzh"},"content":"#### `rebind` - adds a binding for a command to a new term","lastModifiedDate":"2023-09-17"},{"lineNumber":250,"author":{"gitId":"ruiyangzh"},"content":"For any of the functions in this list, this command allows you to rebind the command","lastModifiedDate":"2023-09-17"},{"lineNumber":251,"author":{"gitId":"ruiyangzh"},"content":"identifier to any contiguous string sequence of your choice.","lastModifiedDate":"2023-09-17"},{"lineNumber":252,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":253,"author":{"gitId":"ruiyangzh"},"content":"*Note: Binding can only be done when the term does not contain ","lastModifiedDate":"2023-09-17"},{"lineNumber":254,"author":{"gitId":"ruiyangzh"},"content":"any whitespaces or special characters. ","lastModifiedDate":"2023-09-17"},{"lineNumber":255,"author":{"gitId":"ruiyangzh"},"content":"The binding must also not be already in use, or reserved by the bot.*","lastModifiedDate":"2023-09-17"},{"lineNumber":256,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":257,"author":{"gitId":"ruiyangzh"},"content":"Format: `rebind (String sourceBinding) /to (String customBinding)`","lastModifiedDate":"2023-09-17"},{"lineNumber":258,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":259,"author":{"gitId":"ruiyangzh"},"content":"Bindings can include and discriminate between upper- and lower-case letters.","lastModifiedDate":"2023-09-17"},{"lineNumber":260,"author":{"gitId":"ruiyangzh"},"content":"Digits are allowed in bindings.","lastModifiedDate":"2023-09-17"},{"lineNumber":261,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":262,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":263,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":264,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":265,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":266,"author":{"gitId":"ruiyangzh"},"content":"rebind list /to l","lastModifiedDate":"2023-09-17"},{"lineNumber":267,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":268,"author":{"gitId":"ruiyangzh"},"content":"Adding of custom binding \"l\" to the source binding \"list\" was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":269,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":270,"author":{"gitId":"ruiyangzh"},"content":"l ","lastModifiedDate":"2023-09-17"},{"lineNumber":271,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":272,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":273,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":274,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":275,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":276,"author":{"gitId":"ruiyangzh"},"content":"rebind help /to list","lastModifiedDate":"2023-09-17"},{"lineNumber":277,"author":{"gitId":"ruiyangzh"},"content":"Adding of custom binding \"list\" to the source binding \"help\" is unsuccessful. ","lastModifiedDate":"2023-09-17"},{"lineNumber":278,"author":{"gitId":"ruiyangzh"},"content":"Reason: The custom binding \"list\" is already bound.","lastModifiedDate":"2023-09-17"},{"lineNumber":279,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":280,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":281,"author":{"gitId":"ruiyangzh"},"content":"#### `unbind` - removes a custom binding","lastModifiedDate":"2023-09-17"},{"lineNumber":282,"author":{"gitId":"ruiyangzh"},"content":"Removes any custom binds that were invoked by the previous function.","lastModifiedDate":"2023-09-17"},{"lineNumber":283,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":284,"author":{"gitId":"ruiyangzh"},"content":"*You cannot unbind commands that are prebuilt into the bot.*","lastModifiedDate":"2023-09-17"},{"lineNumber":285,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":286,"author":{"gitId":"ruiyangzh"},"content":"Format: `unbind (String customBinding)`","lastModifiedDate":"2023-09-17"},{"lineNumber":287,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":288,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":289,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":290,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":291,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":292,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":293,"author":{"gitId":"ruiyangzh"},"content":"rebind list /to l","lastModifiedDate":"2023-09-17"},{"lineNumber":294,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":295,"author":{"gitId":"ruiyangzh"},"content":"Adding of custom binding \"l\" to the source binding \"list\" was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":296,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":297,"author":{"gitId":"ruiyangzh"},"content":"l ","lastModifiedDate":"2023-09-17"},{"lineNumber":298,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":299,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":300,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":301,"author":{"gitId":"ruiyangzh"},"content":"unbind l","lastModifiedDate":"2023-09-17"},{"lineNumber":302,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":303,"author":{"gitId":"ruiyangzh"},"content":"Removal of custom binding \"l\" was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":304,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":305,"author":{"gitId":"ruiyangzh"},"content":"l","lastModifiedDate":"2023-09-17"},{"lineNumber":306,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":307,"author":{"gitId":"ruiyangzh"},"content":"Unknown command given; Unrecognized command!","lastModifiedDate":"2023-09-17"},{"lineNumber":308,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":309,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":310,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":311,"author":{"gitId":"ruiyangzh"},"content":"unbind help","lastModifiedDate":"2023-09-17"},{"lineNumber":312,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":313,"author":{"gitId":"ruiyangzh"},"content":"Removal of custom binding \"help\" was unsuccessful. ","lastModifiedDate":"2023-09-17"},{"lineNumber":314,"author":{"gitId":"ruiyangzh"},"content":"Reason: This binding is not removable!","lastModifiedDate":"2023-09-17"},{"lineNumber":315,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"ruiyangzh":289,"-":26}},{"path":"src/main/java/command/AddTaskExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * AddTaskExecutable represents a command that adds a task to the list.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class AddTaskExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private final Task task;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Creates an executable with its task to be added upon execution.","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" public AddTaskExecutable(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * Executes the adding of the task to the list provided, and provides outputs for the interface to print.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that receives the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException when there is a failure in writing to the list or its associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" list.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Added successfully!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Added the task \" + task + \" to the list.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":42}},{"path":"src/main/java/command/BindingExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents an executable that either binds or unbinds a command to an alias.","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"public class BindingExecutable implements Executable {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" private final String sourceBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" private final String customBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" private final String errorMessage;","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Creates a new binding executable instance, with an error message if it failed. Since there is a source binding","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * provided, this indicates a rebinding.","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param sourceBinding The original binding command string.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @param customBinding The custom binding command string.","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" * @param errorMessage the error message, if the binding was unsuccessful. Otherwise, should be blank.","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" public BindingExecutable(String sourceBinding, String customBinding, String errorMessage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" this.sourceBinding \u003d sourceBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" this.customBinding \u003d customBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * Creates a new binding executable instance, with an error message if it failed. Since there is no source binding,","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * this indicates a deletion.","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * @param customBinding The custom binding command string.","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" * @param errorMessage the error message, if the binding was unsuccessful. Otherwise, should be blank.","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" public BindingExecutable(String customBinding, String errorMessage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" this.sourceBinding \u003d null;","lastModifiedDate":"2023-09-17"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" this.customBinding \u003d customBinding;","lastModifiedDate":"2023-09-17"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" * Executes and prints out to the ui the result of the bind command.","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list associated with the bot (unnecessary.)","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the ui to output to.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the bot does not shut down.","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" StringBuilder outputBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" if (this.sourceBinding !\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"Adding of custom binding \");","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"Removal of custom binding \");","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"\\\"\").append(customBinding).append(\"\\\"\");","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" if (this.sourceBinding !\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\" to the source binding \");","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"\\\"\").append(sourceBinding).append(\"\\\"\");","lastModifiedDate":"2023-09-17"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\" was \");","lastModifiedDate":"2023-09-17"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" if (!errorMessage.isBlank()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"unsuccessful.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\" Reason: \");","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(errorMessage);","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"successful.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" ui.output(outputBuilder.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ruiyangzh":71}},{"path":"src/main/java/command/ClearExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Clears the list.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class ClearExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * Clears the list, and produces an output if successful.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * @param list list to be cleared.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the ui to output to if successful.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the method does not terminate the bot.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException if we cannot clear.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" list.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Could not clear;\" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Cleared!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":31}},{"path":"src/main/java/command/DeleteExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Represents a deletion executable of a particular task.","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class DeleteExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private final int index;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Generates a new delete command.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param index the index to be deleted.","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" public DeleteExecutable(int index) {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" * Executes the deletion of the task from the list provided, and provides outputs for the interface to print.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that contains the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException when there is a failure in writing to the list or its associated file,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * and when the index does not exist in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" if (!list.removeTask(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Out of list index\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"deleted task indexed at \" + index + \" successfully\");","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":43}},{"path":"src/main/java/command/Executable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * A general interface that represents a command, which executes,","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * and returns a boolean that represents if the host program is to shut down.","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * Also, throws a FailureInExecuteException if the execution","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * happens to fail for one reason or another.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"public interface Executable {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" // TODO: implement a help() function that makes the HelpCommand\u0027s job easier","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ruiyangzh":19}},{"path":"src/main/java/command/FindExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * Represents an execution call to find a particular keyword in the tasklist.","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"public class FindExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" private final String keyword;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Generates a new find command.","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param keyword the keyword to be searched.","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public FindExecutable(String keyword) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" * Finds tasks that match the keyword if they exist.","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list to search.","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface to output to.","lastModifiedDate":"2023-09-17"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not shut the bot down.","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException if we cannot find any tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cTask\u003e res \u003d list.findTasksMatching(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" if (res.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Could not find task\");","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" StringBuilder ans \u003d new StringBuilder(\"Here are the matching items.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" for (int i \u003d 0; i \u003c res.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" ans.append(\"\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" ans.append(i + 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" ans.append(\". \");","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" ans.append(res.get(i).toString());","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" ui.output(ans.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":45}},{"path":"src/main/java/command/HelpExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" * Represents a command that prints a list of functions.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"public class HelpExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Provides a string for the interface to print, providing a list of helpful commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * @param list the associated list(not needed).","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out the help guide.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"For the release v0.2.0-limited-release only \\n\"","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" + \"Here\u0027s the guidelines for all functions.\\n\"","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" + \"help: lists this help guide\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" + \"list: lists all tasks\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" + \"bye: ends bot\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" + \"mark: mark (int x); marks indicated task\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" + \"unmark: unmark (int x); unmarks indicated task\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" + \"event: event (String name) /from (Date start) /to (Date end); creates event\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" + \"todo: todo (String name); creates todo\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" + \"deadline: deadline (String name) /by (Date deadline); creates deadline\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" + \"delete: delete (int x); deletes the indicated task\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" + \"find: find (String keyword); finds any tasks that contain the keyword\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" + \"rebind: rebind (String sourceBinding) /to (String customBinding); adds an alias for a command\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" + \"unbind: unbind (String customBinding); removes the alias\\n\"","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" + \"For more info, visit the user guide at https://ruiyangzh.github.io/ip.\"","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":35}},{"path":"src/main/java/command/ListExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" * Represents an executable that outputs the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"public class ListExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * outputs the list to the ui.","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list to be printed","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" ui.output(list.listString());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/command/MarkExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Represents the marking or unmarking of a certain task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class MarkExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private final boolean isToBeMarked;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" private final int targetIndex;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * Produces a Mark executable.","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param isToBeMarked the marking to be set.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @param index the index to be set.","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" public MarkExecutable(boolean isToBeMarked, int index) {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" this.isToBeMarked \u003d isToBeMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" this.targetIndex \u003d index;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * Executes the marking/unmarking of a given task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that contains the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException when there is a failure in marking the task, or the task does not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" if (!list.setMark(targetIndex, isToBeMarked)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Out of list index\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"marked task \" + targetIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":46}},{"path":"src/main/java/command/ShutdownExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" * Represents a call to shut down.","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"public class ShutdownExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Outputs a boolean that indicates a shutdown command.","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that contains the task. (not necessary)","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @return true, since the execution ends the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Shutting down now!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * A dialog box that holds text and an image representing the originator of the text.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Creates the dialogbox, setting its size and contents.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param l the text to be represented.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param iv the image to be represented.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" l.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" iv.setFitWidth(100.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" iv.setFitHeight(100.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" this.getChildren().addAll(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruiyangzh":48}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import command.Executable;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.CorruptedFileException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Duke represents a chatbot that parses user inputs and commands, stores tasks given to it in memory and on a file,","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * and provides a user interface for easier correspondence.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" private final TaskList list;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" private final UserInterface ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" private String filePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" private String userImagePath;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" private String dukeImagePath;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" private String logo;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * Creates a new Duke instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" public Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" this.list \u003d new TaskList(storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" this.ui \u003d new UserInterface(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" * Starts the application.","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" * primary stages.","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" stage.setScene(ui.makeScene());","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" stage.setTitle(\"Luke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" startup();","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Hi, I\u0027m \\n\" + logo);","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Could not read from file\");","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" closeDuke();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" } catch (CorruptedFileException f) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" boolean isShuttingDown \u003d handleCorruptFile();","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" if (isShuttingDown) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Could not clear file\");","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" closeDuke();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the arguments.","lastModifiedDate":"2023-09-17"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" public void init() {","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" String[] temp \u003d new String[4];","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" getParameters().getRaw().toArray(temp);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" filePath \u003d temp[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" userImagePath \u003d temp[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":" dukeImagePath \u003d temp[2];","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" logo \u003d temp[3];","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the storage, list and outputs a greeting.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException when unable to read from disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" * @throws CorruptedFileException when unable to interpret file.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" public void startup() throws CorruptedFileException, IOException {","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" storage.init(filePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" list.loadFromDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" ui.init(userImagePath, dukeImagePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" * Shuts down Duke, performing any cleanup tasks along the way.","lastModifiedDate":"2023-09-17"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" public void closeDuke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Goodbye!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" * Clears the file if it is corrupted, and returns a boolean indicating whether the clearing was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" public boolean handleCorruptFile() {","lastModifiedDate":"2023-09-17"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Corrupted file detected! deleting file...\");","lastModifiedDate":"2023-09-17"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-17"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" list.clear();","lastModifiedDate":"2023-09-17"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Can\u0027t delete file.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Cleared corrupted file successfully.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-17"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" // TODO: make this compatible with the new parsing format","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" * Handles a string input and gives an appropriate reply.","lastModifiedDate":"2023-09-17"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" * @param input the string to be parsed.","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" public void handle(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" Executable command \u003d parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":" assert (command !\u003d null); // Parser should throw an exception if this occurs.","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" boolean isShuttingDown \u003d (command.execute(list, ui));","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" if (isShuttingDown) {","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":" closeDuke();","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Unknown command given; \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidVarException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Invalid input; \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" } catch (FailureInExecuteException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Failure to execute command; \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":137}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" // DUKE_ARGS contains the required Strings to make Duke adaptable for different file paths and logos.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" public static final String[] DUKE_ARGS \u003d {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" \"./data/tasks.txt\",","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" \"/images/DaUser.png\",","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" \"/images/DaDuke.png\",","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" \" /$$ /$$ \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$ | $$ \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$ /$$ /$$| $$ /$$ /$$$$$$ \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$ | $$| $$ /$$/ /$$__ $$\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$ | $$| $$$$$$/ | $$$$$$$$\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$ | $$| $$_ $$ | $$_____/\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$$$$$/| $$ \\\\ $$| $$$$$$$\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" + \"|__/ \\\\______/ |__/ \\\\__/ \\\\_______/\"","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" };","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" Application.launch(Duke.class, DUKE_ARGS);","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruiyangzh":25}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import command.AddTaskExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import command.BindingExecutable;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import command.ClearExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import command.DeleteExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"import command.Executable;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"import command.FindExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"import command.HelpExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"import command.ListExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"import command.MarkExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":"import command.ShutdownExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":"import task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * Parses inputs passed via the user interface into commands if possible.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" private static final HashMap\u003cString, ParserFunction\u003e stringToCommand \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" private final HashMap\u003cString, ParserFunction\u003e customCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" public Parser() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" this.customCommand \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" init();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the hashmap.","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" private void init() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"bye\", Parser::parseShutdownParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"help\", Parser::parseHelpParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"list\", Parser::parseListParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"clear\", Parser::parseClearParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"todo\", Parser::parseToDoParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"deadline\", Parser::parseDeadlineParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"event\", Parser::parseEventParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"delete\", Parser::parseDeleteParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"mark\", Parser::parseMarkParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"unmark\", Parser::parseUnmarkParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"find\", Parser::parseFindParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"rebind\", this::parseRebindParams);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"unbind\", this::parseUnbindParams);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" //Remember to add an entry into the hashmap whenever a command is added.","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" * Parses the string passed to it and produces the corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" * @param input the string passed to the parser that is meant to be interpreted.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" * @return the command that the string represents.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidCommandException if the command cannot be identified.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException if the command is identifiable but the parameters are incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" public Executable parse(String input) throws InvalidCommandException, InvalidVarException {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" String commandRegex \u003d \"(\\\\S*)\\\\s?(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(input, commandRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" String commandIdentifier \u003d matcher.group(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" String paramString \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" ParserFunction parsable \u003d stringToCommand.get(commandIdentifier);","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" if (isInvalid(parsable)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" parsable \u003d parseCustom(commandIdentifier);","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" return parsable.apply(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":" * Checks the custom command list for the command identifier.","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" * @param commandIdentifier the string to be searched for.","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" * @return the function mapped to the string if it exists.","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidCommandException if there is no matching function.","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" private ParserFunction parseCustom(String commandIdentifier) throws InvalidCommandException {","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" ParserFunction func \u003d this.customCommand.get(commandIdentifier);","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" if (isInvalid(func)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidCommandException(\"Unrecognized command!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" return func;","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" * Produces a matcher that is guaranteed to be successfully matched.","lastModifiedDate":"2023-09-17"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":" * @param input the string to match to a pattern.","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" * @param regex the pattern that the input should follow.","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" * @return A successful Matcher of the input to the regex.","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException if the matching was unsuccessful.","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" private static Matcher matchString(String input, String regex) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Incorrect format!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":" return matcher;","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":" * Parses a string as a boolean if valid.","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" * @param boolString the string to be parsed.","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" * @return either true or false, depending on the string.","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException if the string does not match the format.","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" private static boolean parseBoolString(String boolString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" if (boolString.equals(\"TRUE\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" } else if (boolString.equals(\"FALSE\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Could not read boolean\");","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" private static void checkEmpty(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":" if (!paramString.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Too many parameters!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" private static void checkNonEmpty(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" if (paramString.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"No parameters!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":" private static int parseIndex(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":" checkNonEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":" int index;","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":" index \u003d Integer.parseInt(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Task number could not be read\");","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"ruiyangzh"},"content":" return index;","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"ruiyangzh"},"content":" private static LocalDate parseLocalDate(String dateString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"ruiyangzh"},"content":" return LocalDate.parse(dateString);","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"ruiyangzh"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Could not parse dates!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseShutdownParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"ruiyangzh"},"content":" return new ShutdownExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":158,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseHelpParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"ruiyangzh"},"content":" return new HelpExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":162,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseListParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"ruiyangzh"},"content":" return new ListExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseClearParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"ruiyangzh"},"content":" return new ClearExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":170,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseToDoParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"ruiyangzh"},"content":" checkNonEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"ruiyangzh"},"content":" Task todo \u003d new ToDo(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"ruiyangzh"},"content":" return new AddTaskExecutable(todo);","lastModifiedDate":"2023-09-14"},{"lineNumber":176,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseDeadlineParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"ruiyangzh"},"content":" String deadlineRegex \u003d \"(\\\\S.*)\\\\s/by\\\\s(\\\\S.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, deadlineRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"ruiyangzh"},"content":" String deadlineString \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"ruiyangzh"},"content":" LocalDate deadlineTime \u003d parseLocalDate(deadlineString);","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"ruiyangzh"},"content":" Deadline deadline \u003d new Deadline(name, deadlineTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"ruiyangzh"},"content":" return new AddTaskExecutable(deadline);","lastModifiedDate":"2023-09-14"},{"lineNumber":186,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseEventParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"ruiyangzh"},"content":" String eventRegex \u003d \"(\\\\S.*)\\\\s/from\\\\s(\\\\S.*)\\\\s/to\\\\s(\\\\S.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, eventRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"ruiyangzh"},"content":" String startString \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"ruiyangzh"},"content":" String endString \u003d matcher.group(3);","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"ruiyangzh"},"content":" LocalDate startTime \u003d parseLocalDate(startString);","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"ruiyangzh"},"content":" LocalDate endTime \u003d parseLocalDate(endString);","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"ruiyangzh"},"content":" Event event \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"ruiyangzh"},"content":" return new AddTaskExecutable(event);","lastModifiedDate":"2023-09-14"},{"lineNumber":197,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseDeleteParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"ruiyangzh"},"content":" return new DeleteExecutable(parseIndex(paramString));","lastModifiedDate":"2023-09-14"},{"lineNumber":200,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":201,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseMarkParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":202,"author":{"gitId":"ruiyangzh"},"content":" return new MarkExecutable(true, parseIndex(paramString));","lastModifiedDate":"2023-09-14"},{"lineNumber":203,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":204,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseUnmarkParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":205,"author":{"gitId":"ruiyangzh"},"content":" return new MarkExecutable(false, parseIndex(paramString));","lastModifiedDate":"2023-09-14"},{"lineNumber":206,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":207,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseFindParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":208,"author":{"gitId":"ruiyangzh"},"content":" checkNonEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":209,"author":{"gitId":"ruiyangzh"},"content":" return new FindExecutable(paramString);","lastModifiedDate":"2023-09-14"},{"lineNumber":210,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":211,"author":{"gitId":"ruiyangzh"},"content":" private Executable parseRebindParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-15"},{"lineNumber":212,"author":{"gitId":"ruiyangzh"},"content":" String rebindRegex \u003d \"(\\\\w*)\\\\s/to\\\\s(\\\\w*)\";","lastModifiedDate":"2023-09-17"},{"lineNumber":213,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, rebindRegex);","lastModifiedDate":"2023-09-15"},{"lineNumber":214,"author":{"gitId":"ruiyangzh"},"content":" String sourceBinding \u003d matcher.group(1);","lastModifiedDate":"2023-09-15"},{"lineNumber":215,"author":{"gitId":"ruiyangzh"},"content":" String customBinding \u003d matcher.group(2);","lastModifiedDate":"2023-09-15"},{"lineNumber":216,"author":{"gitId":"ruiyangzh"},"content":" ParserFunction parserFunc \u003d stringToCommand.get(sourceBinding);","lastModifiedDate":"2023-09-15"},{"lineNumber":217,"author":{"gitId":"ruiyangzh"},"content":" boolean isValidCommand \u003d (parserFunc !\u003d null);","lastModifiedDate":"2023-09-17"},{"lineNumber":218,"author":{"gitId":"ruiyangzh"},"content":" boolean isBound \u003d ((stringToCommand.get(customBinding) !\u003d null) || (customCommand.get(customBinding) !\u003d null));","lastModifiedDate":"2023-09-17"},{"lineNumber":219,"author":{"gitId":"ruiyangzh"},"content":" String errorMessage \u003d \"\";","lastModifiedDate":"2023-09-17"},{"lineNumber":220,"author":{"gitId":"ruiyangzh"},"content":" if (!isValidCommand) {","lastModifiedDate":"2023-09-17"},{"lineNumber":221,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"Invalid source binding.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":222,"author":{"gitId":"ruiyangzh"},"content":" } else if (isBound) {","lastModifiedDate":"2023-09-17"},{"lineNumber":223,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"The custom binding \\\"\" + customBinding + \"\\\" is already bound.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":224,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":225,"author":{"gitId":"ruiyangzh"},"content":" this.customCommand.put(customBinding, parserFunc);","lastModifiedDate":"2023-09-15"},{"lineNumber":226,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":227,"author":{"gitId":"ruiyangzh"},"content":" return new BindingExecutable(sourceBinding, customBinding, errorMessage);","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":229,"author":{"gitId":"ruiyangzh"},"content":" private Executable parseUnbindParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-15"},{"lineNumber":230,"author":{"gitId":"ruiyangzh"},"content":" String rebindRegex \u003d \"(\\\\w*)\";","lastModifiedDate":"2023-09-17"},{"lineNumber":231,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, rebindRegex);","lastModifiedDate":"2023-09-15"},{"lineNumber":232,"author":{"gitId":"ruiyangzh"},"content":" String customBinding \u003d matcher.group(1);","lastModifiedDate":"2023-09-15"},{"lineNumber":233,"author":{"gitId":"ruiyangzh"},"content":" boolean isCurrentlyBound \u003d (this.customCommand.get(customBinding) !\u003d null);","lastModifiedDate":"2023-09-15"},{"lineNumber":234,"author":{"gitId":"ruiyangzh"},"content":" boolean isNonCustom \u003d (stringToCommand.get(customBinding) !\u003d null);","lastModifiedDate":"2023-09-17"},{"lineNumber":235,"author":{"gitId":"ruiyangzh"},"content":" String errorMessage \u003d \"\";","lastModifiedDate":"2023-09-17"},{"lineNumber":236,"author":{"gitId":"ruiyangzh"},"content":" if (isNonCustom) {","lastModifiedDate":"2023-09-17"},{"lineNumber":237,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"This binding is not removable!\";","lastModifiedDate":"2023-09-17"},{"lineNumber":238,"author":{"gitId":"ruiyangzh"},"content":" } else if (!isCurrentlyBound) {","lastModifiedDate":"2023-09-17"},{"lineNumber":239,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"This custom binding does not exist.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":240,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":241,"author":{"gitId":"ruiyangzh"},"content":" this.customCommand.remove(customBinding);","lastModifiedDate":"2023-09-15"},{"lineNumber":242,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":243,"author":{"gitId":"ruiyangzh"},"content":" return new BindingExecutable(customBinding, errorMessage);","lastModifiedDate":"2023-09-17"},{"lineNumber":244,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":245,"author":{"gitId":"ruiyangzh"},"content":" private static boolean isInvalid(ParserFunction func) {","lastModifiedDate":"2023-09-15"},{"lineNumber":246,"author":{"gitId":"ruiyangzh"},"content":" return func \u003d\u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":247,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"ruiyangzh"},"content":" private static ToDo todoFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":249,"author":{"gitId":"ruiyangzh"},"content":" String todoRegex \u003d \"(.*)\" + Task.DIVIDER + \"(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":250,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(string, todoRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":251,"author":{"gitId":"ruiyangzh"},"content":" boolean isComplete \u003d parseBoolString(matcher.group(1));","lastModifiedDate":"2023-09-13"},{"lineNumber":252,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":253,"author":{"gitId":"ruiyangzh"},"content":" return new ToDo(name, isComplete);","lastModifiedDate":"2023-09-13"},{"lineNumber":254,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":255,"author":{"gitId":"ruiyangzh"},"content":" private static Event eventFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":256,"author":{"gitId":"ruiyangzh"},"content":" String eventRegex \u003d \"(.*)\" + Task.DIVIDER + \"(.*)\" + Task.DIVIDER + \"(.*)\" + Task.DIVIDER + \"(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":257,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(string, eventRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":258,"author":{"gitId":"ruiyangzh"},"content":" boolean isComplete \u003d parseBoolString(matcher.group(1));","lastModifiedDate":"2023-09-13"},{"lineNumber":259,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":260,"author":{"gitId":"ruiyangzh"},"content":" LocalDate startTime \u003d parseLocalDate(matcher.group(3));","lastModifiedDate":"2023-09-13"},{"lineNumber":261,"author":{"gitId":"ruiyangzh"},"content":" LocalDate endTime \u003d parseLocalDate(matcher.group(4));","lastModifiedDate":"2023-09-13"},{"lineNumber":262,"author":{"gitId":"ruiyangzh"},"content":" return new Event(name, isComplete, startTime, endTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":263,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":264,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":265,"author":{"gitId":"ruiyangzh"},"content":" private static Deadline deadlineFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":266,"author":{"gitId":"ruiyangzh"},"content":" String deadlineRegex \u003d \"(.*)\" + Task.DIVIDER + \"(.*)\" + Task.DIVIDER + \"(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":267,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(string, deadlineRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":268,"author":{"gitId":"ruiyangzh"},"content":" boolean isComplete \u003d parseBoolString(matcher.group(1));","lastModifiedDate":"2023-09-13"},{"lineNumber":269,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":270,"author":{"gitId":"ruiyangzh"},"content":" LocalDate deadline \u003d parseLocalDate(matcher.group(3));","lastModifiedDate":"2023-09-13"},{"lineNumber":271,"author":{"gitId":"ruiyangzh"},"content":" return new Deadline(name, isComplete, deadline);","lastModifiedDate":"2023-09-13"},{"lineNumber":272,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":273,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":274,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":275,"author":{"gitId":"ruiyangzh"},"content":" * Produces a task from a string, if the string is valid.","lastModifiedDate":"2023-09-14"},{"lineNumber":276,"author":{"gitId":"ruiyangzh"},"content":" * @param string the string to be transformed.","lastModifiedDate":"2023-09-14"},{"lineNumber":277,"author":{"gitId":"ruiyangzh"},"content":" * @return the task representation of the string if valid.","lastModifiedDate":"2023-09-14"},{"lineNumber":278,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException when the string is not in the proper format.","lastModifiedDate":"2023-09-14"},{"lineNumber":279,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":280,"author":{"gitId":"ruiyangzh"},"content":" public static Task taskFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":281,"author":{"gitId":"ruiyangzh"},"content":" String[] temp \u003d string.split(Task.DIVIDER, 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":282,"author":{"gitId":"ruiyangzh"},"content":" if (temp.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-13"},{"lineNumber":283,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException();","lastModifiedDate":"2023-09-13"},{"lineNumber":284,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":285,"author":{"gitId":"ruiyangzh"},"content":" String taskIdentifier \u003d temp[0];","lastModifiedDate":"2023-09-13"},{"lineNumber":286,"author":{"gitId":"ruiyangzh"},"content":" String input \u003d temp[1];","lastModifiedDate":"2023-09-13"},{"lineNumber":287,"author":{"gitId":"ruiyangzh"},"content":" switch (taskIdentifier) {","lastModifiedDate":"2023-09-13"},{"lineNumber":288,"author":{"gitId":"ruiyangzh"},"content":" case (\"TD\"):","lastModifiedDate":"2023-09-13"},{"lineNumber":289,"author":{"gitId":"ruiyangzh"},"content":" return todoFromString(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":290,"author":{"gitId":"ruiyangzh"},"content":" case (\"DL\"):","lastModifiedDate":"2023-09-13"},{"lineNumber":291,"author":{"gitId":"ruiyangzh"},"content":" return deadlineFromString(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":292,"author":{"gitId":"ruiyangzh"},"content":" case (\"EV\"):","lastModifiedDate":"2023-09-13"},{"lineNumber":293,"author":{"gitId":"ruiyangzh"},"content":" return eventFromString(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":294,"author":{"gitId":"ruiyangzh"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":295,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException();","lastModifiedDate":"2023-09-13"},{"lineNumber":296,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":297,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":298,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":298}},{"path":"src/main/java/duke/ParserFunction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import command.Executable;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents a function in the parser that can throw an InvalidVarException.","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"@FunctionalInterface","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"public interface ParserFunction {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" Executable apply(String paramString) throws InvalidVarException;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"ruiyangzh":12}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Represents a file on the disk that contains strings.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private File storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" public Storage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the storage file to the specified path name.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" * @param pathName the path name of the file to be associated with this object.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the file does not exist, and we are unable to create a new file in the specified path.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" public void init(String pathName) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" storage \u003d new File(pathName);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" storage.getParentFile().mkdirs();","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" storage.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * Clears the file to an empty text if possible.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot clear the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" public void clear() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" storage.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" * Writes to the file given an input.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" * @param list An ArrayList representing what we want to write to the disk. (Can be empty.)","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" public void writeToDisk(ArrayList\u003cString\u003e list) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" FileWriter writer \u003d new FileWriter(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" for (String obj : list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" writer.write(obj);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" * Produces an ArrayList of type String that represents the text file associated with this instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" * @return ArrayList of type String that represents the text file associated with this instance. (can be empty)","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" public ArrayList\u003cString\u003e loadFromDisk() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cString\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" Scanner storageScanner \u003d new Scanner(storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" while (storageScanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" result.add(storageScanner.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":65}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.CorruptedFileException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * A tasklist that stores a group of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * Initializes a tasklist, with its associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @param storage the file associated with the tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * Loads the tasklist from the associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @throws CorruptedFileException if the file cannot be interpreted.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" public void loadFromDisk() throws IOException, CorruptedFileException {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" taskList.addAll(stringListToTaskList(storage.loadFromDisk()));","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" * Writes the tasklist to the associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the file cannot be written to.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" public void writeToDisk() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" storage.writeToDisk(taskListToStringList(taskList));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot write the task to disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" public void addTask(Task task) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" assert (task !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" * Removes a task from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" * @param index index of the task to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" * @return whether the index exists in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the index exists and was deleted, but we cannot write the change to disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" public boolean removeTask(int index) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" if (index \u003e taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" taskList.remove(index - 1);","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" * Clears the tasklist and saves that information to the disk.","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the disk cannot be written to.","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" public void clear() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" taskList.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" * Sets the done status of the indicated task.","lastModifiedDate":"2023-09-17"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":" * @param targetIndex the index to have its mark set.","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" * @param isToBeMarkedAs the status that the mark is to be changed to.","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":" * @return a boolean representing if the marking was successful.","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot save the marking to the disk.","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" public boolean setMark(int targetIndex, boolean isToBeMarkedAs) throws IOException {","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" if (targetIndex \u003e taskList.size() || targetIndex \u003c 1) {","lastModifiedDate":"2023-09-17"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" if (isToBeMarkedAs) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" taskList.get(targetIndex - 1).markDone();","lastModifiedDate":"2023-09-17"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" taskList.get(targetIndex - 1).markUndone();","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" * Converts an ArrayList containing strings representing tasks to an arraylist that contains Task objects.","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" * @param stringArrayList the target of conversion.","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" * @return the converted version of stringArrayList.","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" * @throws CorruptedFileException if any of the strings cannot be converted to a task object.","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" private ArrayList\u003cTask\u003e stringListToTaskList(ArrayList\u003cString\u003e stringArrayList) throws CorruptedFileException {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cTask\u003e res \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" for (String s : stringArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":" res.add(Parser.taskFromString(s));","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidVarException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":" throw new CorruptedFileException();","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" return res;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" * Converts an Arraylist containing Tasks to an ArrayList that holds the string representation of those tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" * @param taskArrayList the ArrayList to be converted.","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" * @return the converted ArrayList.","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" private ArrayList\u003cString\u003e taskListToStringList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cString\u003e res \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":" for (Task s : taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" res.add(s.fileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":" return res;","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" * Finds any matching tasks that contain the keyword in their string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" * @param keyword the keyword that is to be searched for.","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" * @return an arrayList containing the tasks that contain the keywords (can be empty.)","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":" public ArrayList\u003cTask\u003e findTasksMatching(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cTask\u003e res \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":" for (Task t: taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":" if (t.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":" res.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":" return res;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"ruiyangzh"},"content":" * Produces a string representation of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"ruiyangzh"},"content":" * @return a string representation of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"ruiyangzh"},"content":" public String listString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"ruiyangzh"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"ruiyangzh"},"content":" return (\"No list, silly!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"ruiyangzh"},"content":" StringBuilder res \u003d new StringBuilder(\"Here\u0027s the list so far.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"ruiyangzh"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"ruiyangzh"},"content":" res.append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"ruiyangzh"},"content":" res.append(i + 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"ruiyangzh"},"content":" res.append(\". \");","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"ruiyangzh"},"content":" res.append(taskList.get(i));","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"ruiyangzh"},"content":" assert !(res.toString().isBlank()); // Should not be blank if we passed the taskList.isEmpty() check.","lastModifiedDate":"2023-09-11"},{"lineNumber":161,"author":{"gitId":"ruiyangzh"},"content":" return res.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":164}},{"path":"src/main/java/duke/UserInterface.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * Represents the user interface of an application.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"public class UserInterface {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" private final Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" private Image userImg;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" private Image dukeImg;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" public UserInterface(Duke duke) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the images into the interface.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" * @param userImagePath relative path of the user image.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" * @param dukeImagePath relative path of the duke image.","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" public void init(String userImagePath, String dukeImagePath) {","lastModifiedDate":"2023-09-17"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" assert(userImagePath !\u003d null \u0026\u0026 dukeImagePath !\u003d null); // Means the arguments are passed wrongly.","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" this.userImg \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(userImagePath)));","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" this.dukeImg \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(dukeImagePath)));","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" this.userImg \u003d null;","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" this.dukeImg \u003d null;","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" * Creates the scene that we want to use to represent the ui.","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" * @return the ui scene.","lastModifiedDate":"2023-09-17"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" public Scene makeScene() {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" spawnUiElements();","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" setUiSettings();","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" setAnchorPaneSettings();","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" addUiFunctionality();","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" return new Scene(mainLayout);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" * Sends the input to the associated chatbot, for it to handle and reply (or not.)","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" public void input() {","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" assert (input !\u003d null);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" Label inputLabel \u003d new Label(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" DialogBox userDialog \u003d DialogBox.getUserDialog(inputLabel, constrUserIV());","lastModifiedDate":"2023-09-17"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.getChildren().add(userDialog);","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" duke.handle(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" * Outputs a string to the user interface.","lastModifiedDate":"2023-09-17"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" * @param output the string to be printed.","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" public void output(String output) {","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":" assert (output !\u003d null);","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" Label dukeLabel \u003d new Label(output);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" DialogBox dukeDialog \u003d DialogBox.getDukeDialog(dukeLabel, constrDukeIV());","lastModifiedDate":"2023-09-17"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.getChildren().add(dukeDialog);","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" private ImageView constrDukeIV() {","lastModifiedDate":"2023-09-17"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" if (dukeImg \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView();","lastModifiedDate":"2023-09-17"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView(dukeImg);","lastModifiedDate":"2023-09-17"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" private ImageView constrUserIV() {","lastModifiedDate":"2023-09-17"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":" if (userImg \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView();","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView(userImg);","lastModifiedDate":"2023-09-17"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" * Creates the ui elements and saves them to the instance\u0027s variables.","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" private void spawnUiElements() {","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":" * Sets the parameters of the ui elements.","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":" private void setUiSettings() {","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" * Sets the AnchorPane settings.","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" private void setAnchorPaneSettings() {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":" * Adds any ui functionalities and interactables.","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":" private void addUiFunctionality() {","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":" sendButton.setOnMouseClicked((event) -\u003e input());","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":" userInput.setOnAction((event) -\u003e input());","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":143}},{"path":"src/main/java/dukeexception/CorruptedFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents an accessible but incorrectly formatted file.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class CorruptedFileException extends DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a CorruptedFileException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public CorruptedFileException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a CorruptedFileException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public CorruptedFileException(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/dukeexception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * Represents any exceptions that are unique to Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a DukeException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public DukeException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a DukeException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public DukeException(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/dukeexception/FailureInExecuteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents a failure in execution of an Executable.","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class FailureInExecuteException extends DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a FailureInExecuteException.","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" public FailureInExecuteException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a FailureInExecuteException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" public FailureInExecuteException(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":21}},{"path":"src/main/java/dukeexception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents a bad command input.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a InvalidCommandException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a InvalidCommandException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public InvalidCommandException(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/dukeexception/InvalidVarException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents a recognized command with bad arguments.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class InvalidVarException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an InvalidVarException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public InvalidVarException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an InvalidVarException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public InvalidVarException(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents an extension of a task, containing a deadline in terms of LocalDate.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a deadline.","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param deadline date at which the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public Deadline(String name, LocalDate deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a deadline with its mark status.","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * @param isMarked whether the task is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @param deadline date at which the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" public Deadline(String name, boolean isMarked, LocalDate deadline) {","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" super(name, isMarked);","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the Deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable Deadline in String form.","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" * Produces a savable format of the Deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" * (We use dividers to minimize the confusion caused by spaces in names.)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" * @return a String format of Deadline with minimal ambiguity in format.","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" return \"DL\" + DIVIDER + super.fileFormat() + DIVIDER + deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":52}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents an extension of a task, containing a start and end time in terms of LocalDate.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" private final LocalDate timeStart;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" private final LocalDate timeEnd;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an event.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * @param timeStart starting time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param timeEnd ending time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" public Event(String name, LocalDate timeStart, LocalDate timeEnd) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" this.timeStart \u003d timeStart;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" this.timeEnd \u003d timeEnd;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an Event, with a boolean representing if it is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @param isMarked whether the event is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @param timeStart starting time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * @param timeEnd ending time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" public Event(String name, boolean isMarked, LocalDate timeStart, LocalDate timeEnd) {","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" super(name, isMarked);","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" this.timeStart \u003d timeStart;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" this.timeEnd \u003d timeEnd;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the Event.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable Event in String form.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" return (\"[E]\" + super.toString() + \" (from: \" + timeStart.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" + \" to: \" + timeEnd.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" * Produces a saveable format of the Event.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" * (We use dividers to minimize the confusion caused by spaces in names.)","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" * @return a String format of Event with minimal ambiguity in format.","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" return \"EV\" + DIVIDER + super.fileFormat() + DIVIDER + timeStart + DIVIDER + timeEnd;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"ruiyangzh":58}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * A generic task, containing a name and completion status.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" public static final String DIVIDER \u003d \"%!%\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" private final String name;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" private boolean isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * Initializes a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" * Initializes a task with its status.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" * @param isComplete whether the task is complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" public Task(String name, boolean isComplete) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" public void markDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" public void markUndone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the Task.","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable Task in String form.","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" if (isComplete) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" return (\"[X] \" + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" return (\"[ ] \" + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" * Formats the task for saving to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" * @return file-formatted task String.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" if (isComplete) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" return (\"TRUE\" + DIVIDER + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" return (\"FALSE\" + DIVIDER + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":65}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * Represents an extension of a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a to-do.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a to-do with its marking status.","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param isMarked whether the task is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" public ToDo(String name, boolean isMarked) {","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" super(name, isMarked);","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the to-do.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable to-do in task form.","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" * Produces a savable format of the to-do.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" * (We use dividers to minimize the confusion caused by spaces in names.)","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" * @return a String format of to-do with minimal ambiguity in format.","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" return \"TD\" + DIVIDER + super.fileFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":43}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import command.AddTaskExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import command.BindingExecutable;","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import command.DeleteExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import command.HelpExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import command.ListExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"import command.MarkExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"import command.ShutdownExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" Parser testParser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" public void simpleCommandBookTest() {","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(ShutdownExecutable.class, testParser.parse(\"bye\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(HelpExecutable.class, testParser.parse(\"help\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(ListExecutable.class, testParser.parse(\"list\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(AddTaskExecutable.class, testParser.parse(\"event name /from 2001-12-01 /to 2003-12-03\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(AddTaskExecutable.class, testParser.parse(\"deadline name /by 2002-02-01\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(AddTaskExecutable.class, testParser.parse(\"todo name\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(MarkExecutable.class, testParser.parse(\"mark 1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(MarkExecutable.class, testParser.parse(\"unmark 1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(DeleteExecutable.class, testParser.parse(\"delete 1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(BindingExecutable.class, testParser.parse(\"rebind help /to h\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(BindingExecutable.class, testParser.parse(\"unbind h\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidVarException | InvalidCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" System.out.println(e.getMessage() + e.getCause());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" public void invalidCommandsTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"fljdkfesjflks\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"listlistlistlist\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\" bye\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"deadlinne name /by 2001-01-01\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"deadLInE name /by 2001-01-01\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" public void invalidVarsTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"deadline\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"deadline name /by 2001-1-1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"bye bye\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"mark x\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"mark y\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"deadline /by 2001-99-99\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"delete two\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"todo \"));","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"mark \"));","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"delete \"));","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":62}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.CorruptedFileException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" public void corruptionTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" Storage corrupted \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" TaskList corruptionList \u003d new TaskList(corrupted);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" corrupted.init(\"./data/corruptedStorage.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(CorruptedFileException.class, corruptionList::loadFromDisk);","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" public void markTest() {","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" Storage tester \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" TaskList testerList \u003d new TaskList(tester);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" tester.init(\"./data/testStorage.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(testerList::loadFromDisk);","lastModifiedDate":"2023-09-17"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e testerList.addTask(new ToDo(\"name\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertTrue(testerList.setMark(1, true)));","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertTrue(testerList.setMark(1, true)));","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertTrue(testerList.setMark(1, false)));","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertFalse(testerList.setMark(-1, true)));","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(tester::clear);","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"event test1 /from start /to end","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"todo test 2","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"deadline test 3 /by dead line","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"unknown command","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"bye bye","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ruiyangzh":16}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"# duke project template","lastModifiedDate":"2023-09-01"},{"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":"ruiyangzh"},"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":"2023-09-01"},{"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":{"ruiyangzh":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":"ruiyangzh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"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":"ruiyangzh"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" apply plugin: \u0027idea\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"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":"ruiyangzh"},"content":"idea {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" module {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" inheritOutputDirs \u003d true","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" version \u003d \"16\"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"},{"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":"ruiyangzh"},"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":"-"},"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":"ruiyangzh"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ruiyangzh":29,"-":40}},{"path":"data/corruptedStorage.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"hjgkjafdbnhd","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"dfhdjkfdhf","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"sdefhjdsa,fmdsanf","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"adjkbaLFDHAELIUREQWYREHDQW","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"# Luke User Guide ","lastModifiedDate":"2023-09-17"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"##### for v0.2.0-limited-release","lastModifiedDate":"2023-09-17"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"**~Luke~** is a chatbot built upon the basic template of Duke, ","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"with a **CLI** (*Command Line Interface*) design. The chatbot is","lastModifiedDate":"2023-09-17"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"designed to help manage tasks in an easy-to-use format.","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"### Add tasks to a list","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"Luke saves lists to a file, allowing you to carry over information","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"across different sessions.","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"### Categorize and mark tasks","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"Luke allows you to use different types of tasks to manage them better, or","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"mark them to indicate completion.","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"### User-friendly","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":"Luke provides **help interfaces** to guide new users, and allows ","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"**rebinding of commands** for advanced users who want","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"to save keystrokes when typing.","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":"## Quickstart","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"### To use:","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":"1. Ensure you have Java 11 or above installed in your Computer.","lastModifiedDate":"2023-09-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":"2. Download the latest duke.jar release. (Check that the user guide is also of the same version!)","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":"3. Copy the file to the folder you want to use as the home folder for your Luke chatbot.","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":"4. Double-click to start the bot!","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":"### On startup:","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":"The bot will on startup create a folder named `data` in the directory ","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":"that the .jar file is placed in, to save tasks to a file.","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":"Thereafter, the bot will display a short introductory message and show its logo.","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":"### General commands","lastModifiedDate":"2023-09-17"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":"#### `help` - Provides a help message","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":"Displays a help message containing all the commands, the syntax to use them, and","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"their functionalities.","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":"Also provides a link to this page, and the current version.","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"Format: `help`","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":"#### `list` - Displays the current list","lastModifiedDate":"2023-09-17"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":"Displays the current list and its contents.","lastModifiedDate":"2023-09-17"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"Format: `list`","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":"2. [D][X] Submit CS2103 IP (by: Sep 22 2023)","lastModifiedDate":"2023-09-17"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":"3. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":"#### \u0027bye\u0027 - Shuts down the bot","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":"This calls the bot to shut down and close the interface.","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":"Format: `bye`","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":"### Task addition and deletion","lastModifiedDate":"2023-09-17"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":"For all task types, names can contain spaces, but **_cannot_**","lastModifiedDate":"2023-09-17"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":"contain the delimiter `%!%`, since this is used in the file format when tasks are saved.","lastModifiedDate":"2023-09-17"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":"Dates **_must_** be written in the format `YYYY-MM-DD`.","lastModifiedDate":"2023-09-17"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":"Tasks all have an associated name, and a complete/incomplete status.","lastModifiedDate":"2023-09-17"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":"#### `todo` - Adds a todo task ","lastModifiedDate":"2023-09-17"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":"Adds a todo task with its name to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":"Format: `todo (String name)`","lastModifiedDate":"2023-09-17"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":"Todos are a form of task with only a name.","lastModifiedDate":"2023-09-17"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":"todo Buy Groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":"Added the task [T][] Buy Groceries to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":"#### `deadline` - Adds a deadline task","lastModifiedDate":"2023-09-17"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":"Adds a deadline task to the list with its name and due date.","lastModifiedDate":"2023-09-17"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":"Format: `deadline (String name) /by (Date deadline)`","lastModifiedDate":"2023-09-17"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":"Deadlines are a class of task that have a deadline associated with them.","lastModifiedDate":"2023-09-17"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":"deadline Submit CS2103 IP /by 2023-09-22","lastModifiedDate":"2023-09-17"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":"Added the task [D][] Submit CS2103 IP (by: Sep 22 2023) to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":"#### `event` - Adds an event task","lastModifiedDate":"2023-09-17"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":"Adds an event task to the list with its name, start and end dates.","lastModifiedDate":"2023-09-17"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":"Format: `event (String name) /from (Date start) /to (Date end)`","lastModifiedDate":"2023-09-17"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":"Events are a class of task that lasts from one date to another.","lastModifiedDate":"2023-09-17"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":"event Go on SEP, hopefully /from 2024-08-12 /to 2025-01-12","lastModifiedDate":"2023-09-17"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":"Added the task [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025) to the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":105,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":"#### `delete` - Deletes the indicated task","lastModifiedDate":"2023-09-17"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":"Deletes the task as indicated by the index.","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":"Format: `delete (int index)`","lastModifiedDate":"2023-09-17"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":"If the index is not an integer or is an invalid index, the bot will inform the user.","lastModifiedDate":"2023-09-17"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":"delete 1","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":"deleted task indexed at 1 successfully","lastModifiedDate":"2023-09-17"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":"delete -1","lastModifiedDate":"2023-09-17"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Out of list index","lastModifiedDate":"2023-09-17"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":"#### `clear` - Clears the list","lastModifiedDate":"2023-09-17"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":"Clears all tasks from the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":"Format: `clear`","lastModifiedDate":"2023-09-17"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":"clear ","lastModifiedDate":"2023-09-17"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":144,"author":{"gitId":"ruiyangzh"},"content":"Cleared!","lastModifiedDate":"2023-09-17"},{"lineNumber":145,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":146,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":147,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":148,"author":{"gitId":"ruiyangzh"},"content":"No tasks, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":149,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":150,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":151,"author":{"gitId":"ruiyangzh"},"content":"### Marking and unmarking","lastModifiedDate":"2023-09-17"},{"lineNumber":152,"author":{"gitId":"ruiyangzh"},"content":"#### `mark` - mark the indicated task","lastModifiedDate":"2023-09-17"},{"lineNumber":153,"author":{"gitId":"ruiyangzh"},"content":"Marks the task as indicated by the index.","lastModifiedDate":"2023-09-17"},{"lineNumber":154,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":155,"author":{"gitId":"ruiyangzh"},"content":"Format: `mark (int index)`","lastModifiedDate":"2023-09-17"},{"lineNumber":156,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":157,"author":{"gitId":"ruiyangzh"},"content":"If the index is not an integer or is an invalid index, the bot will inform the user.","lastModifiedDate":"2023-09-17"},{"lineNumber":158,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":159,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":160,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":161,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":162,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":163,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":164,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":165,"author":{"gitId":"ruiyangzh"},"content":"mark 1","lastModifiedDate":"2023-09-17"},{"lineNumber":166,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":167,"author":{"gitId":"ruiyangzh"},"content":"marked task 1","lastModifiedDate":"2023-09-17"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":169,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":171,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":172,"author":{"gitId":"ruiyangzh"},"content":"1. [T][X] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":173,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":174,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":175,"author":{"gitId":"ruiyangzh"},"content":"mark -1","lastModifiedDate":"2023-09-17"},{"lineNumber":176,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":177,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Out of list index","lastModifiedDate":"2023-09-17"},{"lineNumber":178,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":179,"author":{"gitId":"ruiyangzh"},"content":"#### `unmark` - unmarks the indicated task","lastModifiedDate":"2023-09-17"},{"lineNumber":180,"author":{"gitId":"ruiyangzh"},"content":"Unmarks the task as indicated by the index.","lastModifiedDate":"2023-09-17"},{"lineNumber":181,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":182,"author":{"gitId":"ruiyangzh"},"content":"Format: `unmark (int index)`","lastModifiedDate":"2023-09-17"},{"lineNumber":183,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":184,"author":{"gitId":"ruiyangzh"},"content":"If the index is not an integer or is an invalid index, the bot will inform the user.","lastModifiedDate":"2023-09-17"},{"lineNumber":185,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":186,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":187,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":188,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":189,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":190,"author":{"gitId":"ruiyangzh"},"content":"1. [T][X] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":191,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":192,"author":{"gitId":"ruiyangzh"},"content":"unmark 1","lastModifiedDate":"2023-09-17"},{"lineNumber":193,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":194,"author":{"gitId":"ruiyangzh"},"content":"unmarked task 1","lastModifiedDate":"2023-09-17"},{"lineNumber":195,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":196,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":197,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":198,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":199,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":200,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":201,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":202,"author":{"gitId":"ruiyangzh"},"content":"unmark -1","lastModifiedDate":"2023-09-17"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":204,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Out of list index","lastModifiedDate":"2023-09-17"},{"lineNumber":205,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":206,"author":{"gitId":"ruiyangzh"},"content":"### Utility and convenience commands","lastModifiedDate":"2023-09-17"},{"lineNumber":207,"author":{"gitId":"ruiyangzh"},"content":"#### `find` - finds tasks with matching terms","lastModifiedDate":"2023-09-17"},{"lineNumber":208,"author":{"gitId":"ruiyangzh"},"content":"Searches the tasklist for tasks that match the keyword as indicated.","lastModifiedDate":"2023-09-17"},{"lineNumber":209,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":210,"author":{"gitId":"ruiyangzh"},"content":"Format: `find (String keyword)`","lastModifiedDate":"2023-09-17"},{"lineNumber":211,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":212,"author":{"gitId":"ruiyangzh"},"content":"The search function discriminates between uppercase and lowercase. ","lastModifiedDate":"2023-09-17"},{"lineNumber":213,"author":{"gitId":"ruiyangzh"},"content":"Tasks are searched as according to their user interface representations","lastModifiedDate":"2023-09-17"},{"lineNumber":214,"author":{"gitId":"ruiyangzh"},"content":"(i.e. when you display them as in the command `list`).","lastModifiedDate":"2023-09-17"},{"lineNumber":215,"author":{"gitId":"ruiyangzh"},"content":"The indexes returned do not indicate their index in the list.","lastModifiedDate":"2023-09-17"},{"lineNumber":216,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":217,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":219,"author":{"gitId":"ruiyangzh"},"content":"Here\u0027s the list so far.","lastModifiedDate":"2023-09-17"},{"lineNumber":220,"author":{"gitId":"ruiyangzh"},"content":"1. [T][] Buy groceries","lastModifiedDate":"2023-09-17"},{"lineNumber":221,"author":{"gitId":"ruiyangzh"},"content":"2. [D][X] Submit CS2103 IP (by: Sep 22 2023)","lastModifiedDate":"2023-09-17"},{"lineNumber":222,"author":{"gitId":"ruiyangzh"},"content":"3. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":224,"author":{"gitId":"ruiyangzh"},"content":"find Sub","lastModifiedDate":"2023-09-17"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":226,"author":{"gitId":"ruiyangzh"},"content":"Here are the matching items. ","lastModifiedDate":"2023-09-17"},{"lineNumber":227,"author":{"gitId":"ruiyangzh"},"content":"1. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":229,"author":{"gitId":"ruiyangzh"},"content":"find [X]","lastModifiedDate":"2023-09-17"},{"lineNumber":230,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":231,"author":{"gitId":"ruiyangzh"},"content":"Here are the matching items. ","lastModifiedDate":"2023-09-17"},{"lineNumber":232,"author":{"gitId":"ruiyangzh"},"content":"1. [D][X] Submit CS2103 IP (by: Sep 22 2023)","lastModifiedDate":"2023-09-17"},{"lineNumber":233,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":234,"author":{"gitId":"ruiyangzh"},"content":"find Sep 22","lastModifiedDate":"2023-09-17"},{"lineNumber":235,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":236,"author":{"gitId":"ruiyangzh"},"content":"Here are the matching items. ","lastModifiedDate":"2023-09-17"},{"lineNumber":237,"author":{"gitId":"ruiyangzh"},"content":"1. [E][] Go on SEP, hopefully (from: Aug 12 2024 to: Jan 12 2025)","lastModifiedDate":"2023-09-17"},{"lineNumber":238,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":239,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":240,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":241,"author":{"gitId":"ruiyangzh"},"content":"find Buy Bananas","lastModifiedDate":"2023-09-17"},{"lineNumber":242,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":243,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Could not find task","lastModifiedDate":"2023-09-17"},{"lineNumber":244,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":245,"author":{"gitId":"ruiyangzh"},"content":"find 2024-09-12","lastModifiedDate":"2023-09-17"},{"lineNumber":246,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":247,"author":{"gitId":"ruiyangzh"},"content":"Failure to execute command; Could not find task","lastModifiedDate":"2023-09-17"},{"lineNumber":248,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":249,"author":{"gitId":"ruiyangzh"},"content":"#### `rebind` - adds a binding for a command to a new term","lastModifiedDate":"2023-09-17"},{"lineNumber":250,"author":{"gitId":"ruiyangzh"},"content":"For any of the functions in this list, this command allows you to rebind the command","lastModifiedDate":"2023-09-17"},{"lineNumber":251,"author":{"gitId":"ruiyangzh"},"content":"identifier to any contiguous string sequence of your choice.","lastModifiedDate":"2023-09-17"},{"lineNumber":252,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":253,"author":{"gitId":"ruiyangzh"},"content":"*Note: Binding can only be done when the term does not contain ","lastModifiedDate":"2023-09-17"},{"lineNumber":254,"author":{"gitId":"ruiyangzh"},"content":"any whitespaces or special characters. ","lastModifiedDate":"2023-09-17"},{"lineNumber":255,"author":{"gitId":"ruiyangzh"},"content":"The binding must also not be already in use, or reserved by the bot.*","lastModifiedDate":"2023-09-17"},{"lineNumber":256,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":257,"author":{"gitId":"ruiyangzh"},"content":"Format: `rebind (String sourceBinding) /to (String customBinding)`","lastModifiedDate":"2023-09-17"},{"lineNumber":258,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":259,"author":{"gitId":"ruiyangzh"},"content":"Bindings can include and discriminate between upper- and lower-case letters.","lastModifiedDate":"2023-09-17"},{"lineNumber":260,"author":{"gitId":"ruiyangzh"},"content":"Digits are allowed in bindings.","lastModifiedDate":"2023-09-17"},{"lineNumber":261,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":262,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":263,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":264,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":265,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":266,"author":{"gitId":"ruiyangzh"},"content":"rebind list /to l","lastModifiedDate":"2023-09-17"},{"lineNumber":267,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":268,"author":{"gitId":"ruiyangzh"},"content":"Adding of custom binding \"l\" to the source binding \"list\" was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":269,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":270,"author":{"gitId":"ruiyangzh"},"content":"l ","lastModifiedDate":"2023-09-17"},{"lineNumber":271,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":272,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":273,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":274,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":275,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":276,"author":{"gitId":"ruiyangzh"},"content":"rebind help /to list","lastModifiedDate":"2023-09-17"},{"lineNumber":277,"author":{"gitId":"ruiyangzh"},"content":"Adding of custom binding \"list\" to the source binding \"help\" is unsuccessful. ","lastModifiedDate":"2023-09-17"},{"lineNumber":278,"author":{"gitId":"ruiyangzh"},"content":"Reason: The custom binding \"list\" is already bound.","lastModifiedDate":"2023-09-17"},{"lineNumber":279,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":280,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":281,"author":{"gitId":"ruiyangzh"},"content":"#### `unbind` - removes a custom binding","lastModifiedDate":"2023-09-17"},{"lineNumber":282,"author":{"gitId":"ruiyangzh"},"content":"Removes any custom binds that were invoked by the previous function.","lastModifiedDate":"2023-09-17"},{"lineNumber":283,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":284,"author":{"gitId":"ruiyangzh"},"content":"*You cannot unbind commands that are prebuilt into the bot.*","lastModifiedDate":"2023-09-17"},{"lineNumber":285,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":286,"author":{"gitId":"ruiyangzh"},"content":"Format: `unbind (String customBinding)`","lastModifiedDate":"2023-09-17"},{"lineNumber":287,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":288,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":289,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-09-17"},{"lineNumber":290,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":291,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":292,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":293,"author":{"gitId":"ruiyangzh"},"content":"rebind list /to l","lastModifiedDate":"2023-09-17"},{"lineNumber":294,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":295,"author":{"gitId":"ruiyangzh"},"content":"Adding of custom binding \"l\" to the source binding \"list\" was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":296,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":297,"author":{"gitId":"ruiyangzh"},"content":"l ","lastModifiedDate":"2023-09-17"},{"lineNumber":298,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":299,"author":{"gitId":"ruiyangzh"},"content":"No list, silly!","lastModifiedDate":"2023-09-17"},{"lineNumber":300,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":301,"author":{"gitId":"ruiyangzh"},"content":"unbind l","lastModifiedDate":"2023-09-17"},{"lineNumber":302,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":303,"author":{"gitId":"ruiyangzh"},"content":"Removal of custom binding \"l\" was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":304,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":305,"author":{"gitId":"ruiyangzh"},"content":"l","lastModifiedDate":"2023-09-17"},{"lineNumber":306,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":307,"author":{"gitId":"ruiyangzh"},"content":"Unknown command given; Unrecognized command!","lastModifiedDate":"2023-09-17"},{"lineNumber":308,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":309,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":310,"author":{"gitId":"ruiyangzh"},"content":"```","lastModifiedDate":"2023-09-17"},{"lineNumber":311,"author":{"gitId":"ruiyangzh"},"content":"unbind help","lastModifiedDate":"2023-09-17"},{"lineNumber":312,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":313,"author":{"gitId":"ruiyangzh"},"content":"Removal of custom binding \"help\" was unsuccessful. ","lastModifiedDate":"2023-09-17"},{"lineNumber":314,"author":{"gitId":"ruiyangzh"},"content":"Reason: This binding is not removable!","lastModifiedDate":"2023-09-17"},{"lineNumber":315,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"ruiyangzh":289,"-":26}},{"path":"src/main/java/command/AddTaskExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * AddTaskExecutable represents a command that adds a task to the list.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class AddTaskExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private final Task task;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Creates an executable with its task to be added upon execution.","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" public AddTaskExecutable(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * Executes the adding of the task to the list provided, and provides outputs for the interface to print.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that receives the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException when there is a failure in writing to the list or its associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" list.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Added successfully!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Added the task \" + task + \" to the list.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":42}},{"path":"src/main/java/command/BindingExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents an executable that either binds or unbinds a command to an alias.","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"public class BindingExecutable implements Executable {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" private final String sourceBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" private final String customBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" private final String errorMessage;","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Creates a new binding executable instance, with an error message if it failed. Since there is a source binding","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * provided, this indicates a rebinding.","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param sourceBinding The original binding command string.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @param customBinding The custom binding command string.","lastModifiedDate":"2023-09-17"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" * @param errorMessage the error message, if the binding was unsuccessful. Otherwise, should be blank.","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" public BindingExecutable(String sourceBinding, String customBinding, String errorMessage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" this.sourceBinding \u003d sourceBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" this.customBinding \u003d customBinding;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * Creates a new binding executable instance, with an error message if it failed. Since there is no source binding,","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * this indicates a deletion.","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * @param customBinding The custom binding command string.","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" * @param errorMessage the error message, if the binding was unsuccessful. Otherwise, should be blank.","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" public BindingExecutable(String customBinding, String errorMessage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" this.sourceBinding \u003d null;","lastModifiedDate":"2023-09-17"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" this.customBinding \u003d customBinding;","lastModifiedDate":"2023-09-17"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" * Executes and prints out to the ui the result of the bind command.","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list associated with the bot (unnecessary.)","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the ui to output to.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the bot does not shut down.","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" StringBuilder outputBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" if (this.sourceBinding !\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"Adding of custom binding \");","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"Removal of custom binding \");","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"\\\"\").append(customBinding).append(\"\\\"\");","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" if (this.sourceBinding !\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\" to the source binding \");","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"\\\"\").append(sourceBinding).append(\"\\\"\");","lastModifiedDate":"2023-09-17"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\" was \");","lastModifiedDate":"2023-09-17"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" if (!errorMessage.isBlank()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"unsuccessful.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\" Reason: \");","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(errorMessage);","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" outputBuilder.append(\"successful.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" ui.output(outputBuilder.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"ruiyangzh":71}},{"path":"src/main/java/command/ClearExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Clears the list.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class ClearExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * Clears the list, and produces an output if successful.","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * @param list list to be cleared.","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the ui to output to if successful.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the method does not terminate the bot.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException if we cannot clear.","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" list.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Could not clear;\" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Cleared!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":31}},{"path":"src/main/java/command/DeleteExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Represents a deletion executable of a particular task.","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class DeleteExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private final int index;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Generates a new delete command.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param index the index to be deleted.","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" public DeleteExecutable(int index) {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" * Executes the deletion of the task from the list provided, and provides outputs for the interface to print.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that contains the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException when there is a failure in writing to the list or its associated file,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * and when the index does not exist in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" if (!list.removeTask(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Out of list index\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"deleted task indexed at \" + index + \" successfully\");","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":43}},{"path":"src/main/java/command/Executable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * A general interface that represents a command, which executes,","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * and returns a boolean that represents if the host program is to shut down.","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * Also, throws a FailureInExecuteException if the execution","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * happens to fail for one reason or another.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"public interface Executable {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" // TODO: implement a help() function that makes the HelpCommand\u0027s job easier","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ruiyangzh":19}},{"path":"src/main/java/command/FindExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * Represents an execution call to find a particular keyword in the tasklist.","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"public class FindExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" private final String keyword;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Generates a new find command.","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param keyword the keyword to be searched.","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public FindExecutable(String keyword) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" * Finds tasks that match the keyword if they exist.","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list to search.","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface to output to.","lastModifiedDate":"2023-09-17"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not shut the bot down.","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException if we cannot find any tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cTask\u003e res \u003d list.findTasksMatching(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" if (res.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Could not find task\");","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" StringBuilder ans \u003d new StringBuilder(\"Here are the matching items.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" for (int i \u003d 0; i \u003c res.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" ans.append(\"\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" ans.append(i + 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" ans.append(\". \");","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" ans.append(res.get(i).toString());","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" ui.output(ans.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":45}},{"path":"src/main/java/command/HelpExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" * Represents a command that prints a list of functions.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"public class HelpExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Provides a string for the interface to print, providing a list of helpful commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * @param list the associated list(not needed).","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out the help guide.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"For the release v0.2.0-limited-release only \\n\"","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" + \"Here\u0027s the guidelines for all functions.\\n\"","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" + \"help: lists this help guide\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" + \"list: lists all tasks\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" + \"bye: ends bot\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" + \"mark: mark (int x); marks indicated task\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" + \"unmark: unmark (int x); unmarks indicated task\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" + \"event: event (String name) /from (Date start) /to (Date end); creates event\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" + \"todo: todo (String name); creates todo\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" + \"deadline: deadline (String name) /by (Date deadline); creates deadline\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" + \"delete: delete (int x); deletes the indicated task\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" + \"find: find (String keyword); finds any tasks that contain the keyword\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" + \"rebind: rebind (String sourceBinding) /to (String customBinding); adds an alias for a command\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" + \"unbind: unbind (String customBinding); removes the alias\\n\"","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" + \"For more info, visit the user guide at https://ruiyangzh.github.io/ip.\"","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":35}},{"path":"src/main/java/command/ListExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" * Represents an executable that outputs the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"public class ListExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * outputs the list to the ui.","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list to be printed","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" ui.output(list.listString());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/command/MarkExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Represents the marking or unmarking of a certain task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class MarkExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private final boolean isToBeMarked;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" private final int targetIndex;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * Produces a Mark executable.","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param isToBeMarked the marking to be set.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @param index the index to be set.","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" public MarkExecutable(boolean isToBeMarked, int index) {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" this.isToBeMarked \u003d isToBeMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" this.targetIndex \u003d index;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * Executes the marking/unmarking of a given task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that contains the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * @return false, since the execution does not end the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" * @throws FailureInExecuteException when there is a failure in marking the task, or the task does not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) throws FailureInExecuteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" if (!list.setMark(targetIndex, isToBeMarked)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(\"Out of list index\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" throw new FailureInExecuteException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" String outputString \u003d (isToBeMarked ? \"marked\" : \"unmarked\") + \" task \" + targetIndex;","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" ui.output(outputString);","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":47}},{"path":"src/main/java/command/ShutdownExecutable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import duke.UserInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" * Represents a call to shut down.","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"public class ShutdownExecutable implements Executable {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Outputs a boolean that indicates a shutdown command.","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * @param list the list that contains the task. (not necessary)","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * @param ui the interface that prints out any necessary outputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @return true, since the execution ends the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" public boolean execute(TaskList list, UserInterface ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Shutting down now!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * A dialog box that holds text and an image representing the originator of the text.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Creates the dialogbox, setting its size and contents.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param l the text to be represented.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param iv the image to be represented.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" l.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" iv.setFitWidth(100.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" iv.setFitHeight(100.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" this.getChildren().addAll(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruiyangzh":48}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import command.Executable;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.CorruptedFileException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.FailureInExecuteException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Duke represents a chatbot that parses user inputs and commands, stores tasks given to it in memory and on a file,","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * and provides a user interface for easier correspondence.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" private final TaskList list;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" private final UserInterface ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" private String filePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" private String userImagePath;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" private String dukeImagePath;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" private String logo;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * Creates a new Duke instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" public Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" this.list \u003d new TaskList(storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" this.ui \u003d new UserInterface(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" * Starts the application.","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" * primary stages.","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" stage.setScene(ui.makeScene());","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" stage.setTitle(\"Luke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" startup();","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Hi, I\u0027m \\n\" + logo);","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Could not read from file\");","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" closeDuke();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" } catch (CorruptedFileException f) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" boolean isShuttingDown \u003d handleCorruptFile();","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" if (isShuttingDown) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Could not clear file\");","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" closeDuke();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the arguments.","lastModifiedDate":"2023-09-17"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" public void init() {","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" String[] temp \u003d new String[4];","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" getParameters().getRaw().toArray(temp);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" filePath \u003d temp[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" userImagePath \u003d temp[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":" dukeImagePath \u003d temp[2];","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" logo \u003d temp[3];","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the storage, list and outputs a greeting.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException when unable to read from disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" * @throws CorruptedFileException when unable to interpret file.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" public void startup() throws CorruptedFileException, IOException {","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" storage.init(filePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" list.loadFromDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" ui.init(userImagePath, dukeImagePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" * Shuts down Duke, performing any cleanup tasks along the way.","lastModifiedDate":"2023-09-17"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" public void closeDuke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Goodbye!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" * Clears the file if it is corrupted, and returns a boolean indicating whether the clearing was successful.","lastModifiedDate":"2023-09-17"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" public boolean handleCorruptFile() {","lastModifiedDate":"2023-09-17"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Corrupted file detected! deleting file...\");","lastModifiedDate":"2023-09-17"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-17"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" list.clear();","lastModifiedDate":"2023-09-17"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Can\u0027t delete file.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Cleared corrupted file successfully.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-17"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" // TODO: make this compatible with the new parsing format","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" * Handles a string input and gives an appropriate reply.","lastModifiedDate":"2023-09-17"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" * @param input the string to be parsed.","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" public void handle(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" Executable command \u003d parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":" assert (command !\u003d null); // Parser should throw an exception if this occurs.","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" boolean isShuttingDown \u003d (command.execute(list, ui));","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" if (isShuttingDown) {","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":" closeDuke();","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Unknown command given; \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidVarException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Invalid input; \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" } catch (FailureInExecuteException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" ui.output(\"Failure to execute command; \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":137}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" // DUKE_ARGS contains the required Strings to make Duke adaptable for different file paths and logos.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" public static final String[] DUKE_ARGS \u003d {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" \"./data/tasks.txt\",","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" \"/images/DaUser.png\",","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" \"/images/DaDuke.png\",","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" \" /$$ /$$ \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$ | $$ \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$ /$$ /$$| $$ /$$ /$$$$$$ \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$ | $$| $$ /$$/ /$$__ $$\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$ | $$| $$$$$$/ | $$$$$$$$\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$ | $$| $$_ $$ | $$_____/\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" + \"| $$| $$$$$$/| $$ \\\\ $$| $$$$$$$\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" + \"|__/ \\\\______/ |__/ \\\\__/ \\\\_______/\"","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" };","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" Application.launch(Duke.class, DUKE_ARGS);","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruiyangzh":25}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import command.AddTaskExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import command.BindingExecutable;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import command.ClearExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import command.DeleteExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"import command.Executable;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"import command.FindExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"import command.HelpExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"import command.ListExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"import command.MarkExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":"import command.ShutdownExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":"import task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * Parses inputs passed via the user interface into commands if possible.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" private static final HashMap\u003cString, ParserFunction\u003e stringToCommand \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" private final HashMap\u003cString, ParserFunction\u003e customCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" public Parser() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" this.customCommand \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" init();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the hashmap.","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" private void init() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"bye\", Parser::parseShutdownParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"help\", Parser::parseHelpParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"list\", Parser::parseListParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"clear\", Parser::parseClearParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"todo\", Parser::parseToDoParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"deadline\", Parser::parseDeadlineParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"event\", Parser::parseEventParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"delete\", Parser::parseDeleteParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"mark\", Parser::parseMarkParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"unmark\", Parser::parseUnmarkParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"find\", Parser::parseFindParams);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"rebind\", this::parseRebindParams);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" stringToCommand.put(\"unbind\", this::parseUnbindParams);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" //Remember to add an entry into the hashmap whenever a command is added.","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" * Parses the string passed to it and produces the corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" * @param input the string passed to the parser that is meant to be interpreted.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" * @return the command that the string represents.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidCommandException if the command cannot be identified.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException if the command is identifiable but the parameters are incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" public Executable parse(String input) throws InvalidCommandException, InvalidVarException {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" String commandRegex \u003d \"(\\\\S*)\\\\s?(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(input, commandRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" String commandIdentifier \u003d matcher.group(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" String paramString \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" ParserFunction parsable \u003d stringToCommand.get(commandIdentifier);","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" if (isInvalid(parsable)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" parsable \u003d parseCustom(commandIdentifier);","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" return parsable.apply(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":" * Checks the custom command list for the command identifier.","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" * @param commandIdentifier the string to be searched for.","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" * @return the function mapped to the string if it exists.","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidCommandException if there is no matching function.","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" private ParserFunction parseCustom(String commandIdentifier) throws InvalidCommandException {","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" ParserFunction func \u003d this.customCommand.get(commandIdentifier);","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" if (isInvalid(func)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidCommandException(\"Unrecognized command!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" return func;","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" * Produces a matcher that is guaranteed to be successfully matched.","lastModifiedDate":"2023-09-17"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":" * @param input the string to match to a pattern.","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" * @param regex the pattern that the input should follow.","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" * @return A successful Matcher of the input to the regex.","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException if the matching was unsuccessful.","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" private static Matcher matchString(String input, String regex) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Incorrect format!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":" return matcher;","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":" * Parses a string as a boolean if valid.","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" * @param boolString the string to be parsed.","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" * @return either true or false, depending on the string.","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException if the string does not match the format.","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" private static boolean parseBoolString(String boolString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" if (boolString.equals(\"TRUE\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" } else if (boolString.equals(\"FALSE\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Could not read boolean\");","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" private static void checkEmpty(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":" if (!paramString.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Too many parameters!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" private static void checkNonEmpty(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" if (paramString.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"No parameters!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":" private static int parseIndex(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":" checkNonEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":" int index;","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":" index \u003d Integer.parseInt(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Task number could not be read\");","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"ruiyangzh"},"content":" return index;","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"ruiyangzh"},"content":" private static LocalDate parseLocalDate(String dateString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"ruiyangzh"},"content":" return LocalDate.parse(dateString);","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"ruiyangzh"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException(\"Could not parse dates!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseShutdownParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"ruiyangzh"},"content":" return new ShutdownExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":158,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseHelpParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"ruiyangzh"},"content":" return new HelpExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":162,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseListParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"ruiyangzh"},"content":" return new ListExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseClearParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"ruiyangzh"},"content":" checkEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"ruiyangzh"},"content":" return new ClearExecutable();","lastModifiedDate":"2023-09-14"},{"lineNumber":170,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseToDoParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"ruiyangzh"},"content":" checkNonEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"ruiyangzh"},"content":" Task todo \u003d new ToDo(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"ruiyangzh"},"content":" return new AddTaskExecutable(todo);","lastModifiedDate":"2023-09-14"},{"lineNumber":176,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseDeadlineParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"ruiyangzh"},"content":" String deadlineRegex \u003d \"(\\\\S.*)\\\\s/by\\\\s(\\\\S.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, deadlineRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"ruiyangzh"},"content":" String deadlineString \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"ruiyangzh"},"content":" LocalDate deadlineTime \u003d parseLocalDate(deadlineString);","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"ruiyangzh"},"content":" Deadline deadline \u003d new Deadline(name, deadlineTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"ruiyangzh"},"content":" return new AddTaskExecutable(deadline);","lastModifiedDate":"2023-09-14"},{"lineNumber":186,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseEventParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"ruiyangzh"},"content":" String eventRegex \u003d \"(\\\\S.*)\\\\s/from\\\\s(\\\\S.*)\\\\s/to\\\\s(\\\\S.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, eventRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"ruiyangzh"},"content":" String startString \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"ruiyangzh"},"content":" String endString \u003d matcher.group(3);","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"ruiyangzh"},"content":" LocalDate startTime \u003d parseLocalDate(startString);","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"ruiyangzh"},"content":" LocalDate endTime \u003d parseLocalDate(endString);","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"ruiyangzh"},"content":" Event event \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"ruiyangzh"},"content":" return new AddTaskExecutable(event);","lastModifiedDate":"2023-09-14"},{"lineNumber":197,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseDeleteParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"ruiyangzh"},"content":" return new DeleteExecutable(parseIndex(paramString));","lastModifiedDate":"2023-09-14"},{"lineNumber":200,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":201,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseMarkParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":202,"author":{"gitId":"ruiyangzh"},"content":" return new MarkExecutable(true, parseIndex(paramString));","lastModifiedDate":"2023-09-14"},{"lineNumber":203,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":204,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseUnmarkParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":205,"author":{"gitId":"ruiyangzh"},"content":" return new MarkExecutable(false, parseIndex(paramString));","lastModifiedDate":"2023-09-14"},{"lineNumber":206,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":207,"author":{"gitId":"ruiyangzh"},"content":" private static Executable parseFindParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":208,"author":{"gitId":"ruiyangzh"},"content":" checkNonEmpty(paramString);","lastModifiedDate":"2023-09-13"},{"lineNumber":209,"author":{"gitId":"ruiyangzh"},"content":" return new FindExecutable(paramString);","lastModifiedDate":"2023-09-14"},{"lineNumber":210,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":211,"author":{"gitId":"ruiyangzh"},"content":" private Executable parseRebindParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-15"},{"lineNumber":212,"author":{"gitId":"ruiyangzh"},"content":" String rebindRegex \u003d \"(\\\\w*)\\\\s/to\\\\s(\\\\w*)\";","lastModifiedDate":"2023-09-17"},{"lineNumber":213,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, rebindRegex);","lastModifiedDate":"2023-09-15"},{"lineNumber":214,"author":{"gitId":"ruiyangzh"},"content":" String sourceBinding \u003d matcher.group(1);","lastModifiedDate":"2023-09-15"},{"lineNumber":215,"author":{"gitId":"ruiyangzh"},"content":" String customBinding \u003d matcher.group(2);","lastModifiedDate":"2023-09-15"},{"lineNumber":216,"author":{"gitId":"ruiyangzh"},"content":" ParserFunction parserFunc \u003d stringToCommand.get(sourceBinding);","lastModifiedDate":"2023-09-15"},{"lineNumber":217,"author":{"gitId":"ruiyangzh"},"content":" boolean isValidCommand \u003d (parserFunc !\u003d null);","lastModifiedDate":"2023-09-17"},{"lineNumber":218,"author":{"gitId":"ruiyangzh"},"content":" boolean isBound \u003d ((stringToCommand.get(customBinding) !\u003d null) || (customCommand.get(customBinding) !\u003d null));","lastModifiedDate":"2023-09-17"},{"lineNumber":219,"author":{"gitId":"ruiyangzh"},"content":" String errorMessage \u003d \"\";","lastModifiedDate":"2023-09-17"},{"lineNumber":220,"author":{"gitId":"ruiyangzh"},"content":" if (!isValidCommand) {","lastModifiedDate":"2023-09-17"},{"lineNumber":221,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"Invalid source binding.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":222,"author":{"gitId":"ruiyangzh"},"content":" } else if (isBound) {","lastModifiedDate":"2023-09-17"},{"lineNumber":223,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"The custom binding \\\"\" + customBinding + \"\\\" is already bound.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":224,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":225,"author":{"gitId":"ruiyangzh"},"content":" this.customCommand.put(customBinding, parserFunc);","lastModifiedDate":"2023-09-15"},{"lineNumber":226,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":227,"author":{"gitId":"ruiyangzh"},"content":" return new BindingExecutable(sourceBinding, customBinding, errorMessage);","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":229,"author":{"gitId":"ruiyangzh"},"content":" private Executable parseUnbindParams(String paramString) throws InvalidVarException {","lastModifiedDate":"2023-09-15"},{"lineNumber":230,"author":{"gitId":"ruiyangzh"},"content":" String rebindRegex \u003d \"(\\\\w*)\";","lastModifiedDate":"2023-09-17"},{"lineNumber":231,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(paramString, rebindRegex);","lastModifiedDate":"2023-09-15"},{"lineNumber":232,"author":{"gitId":"ruiyangzh"},"content":" String customBinding \u003d matcher.group(1);","lastModifiedDate":"2023-09-15"},{"lineNumber":233,"author":{"gitId":"ruiyangzh"},"content":" boolean isCurrentlyBound \u003d (this.customCommand.get(customBinding) !\u003d null);","lastModifiedDate":"2023-09-15"},{"lineNumber":234,"author":{"gitId":"ruiyangzh"},"content":" boolean isNonCustom \u003d (stringToCommand.get(customBinding) !\u003d null);","lastModifiedDate":"2023-09-17"},{"lineNumber":235,"author":{"gitId":"ruiyangzh"},"content":" String errorMessage \u003d \"\";","lastModifiedDate":"2023-09-17"},{"lineNumber":236,"author":{"gitId":"ruiyangzh"},"content":" if (isNonCustom) {","lastModifiedDate":"2023-09-17"},{"lineNumber":237,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"This binding is not removable!\";","lastModifiedDate":"2023-09-17"},{"lineNumber":238,"author":{"gitId":"ruiyangzh"},"content":" } else if (!isCurrentlyBound) {","lastModifiedDate":"2023-09-17"},{"lineNumber":239,"author":{"gitId":"ruiyangzh"},"content":" errorMessage \u003d \"This custom binding does not exist.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":240,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":241,"author":{"gitId":"ruiyangzh"},"content":" this.customCommand.remove(customBinding);","lastModifiedDate":"2023-09-15"},{"lineNumber":242,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":243,"author":{"gitId":"ruiyangzh"},"content":" return new BindingExecutable(customBinding, errorMessage);","lastModifiedDate":"2023-09-17"},{"lineNumber":244,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":245,"author":{"gitId":"ruiyangzh"},"content":" private static boolean isInvalid(ParserFunction func) {","lastModifiedDate":"2023-09-15"},{"lineNumber":246,"author":{"gitId":"ruiyangzh"},"content":" return func \u003d\u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":247,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"ruiyangzh"},"content":" private static ToDo todoFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":249,"author":{"gitId":"ruiyangzh"},"content":" String todoRegex \u003d \"(.*)\" + Task.DIVIDER + \"(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":250,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(string, todoRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":251,"author":{"gitId":"ruiyangzh"},"content":" boolean isComplete \u003d parseBoolString(matcher.group(1));","lastModifiedDate":"2023-09-13"},{"lineNumber":252,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":253,"author":{"gitId":"ruiyangzh"},"content":" return new ToDo(name, isComplete);","lastModifiedDate":"2023-09-13"},{"lineNumber":254,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":255,"author":{"gitId":"ruiyangzh"},"content":" private static Event eventFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":256,"author":{"gitId":"ruiyangzh"},"content":" String eventRegex \u003d \"(.*)\" + Task.DIVIDER + \"(.*)\" + Task.DIVIDER + \"(.*)\" + Task.DIVIDER + \"(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":257,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(string, eventRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":258,"author":{"gitId":"ruiyangzh"},"content":" boolean isComplete \u003d parseBoolString(matcher.group(1));","lastModifiedDate":"2023-09-13"},{"lineNumber":259,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":260,"author":{"gitId":"ruiyangzh"},"content":" LocalDate startTime \u003d parseLocalDate(matcher.group(3));","lastModifiedDate":"2023-09-13"},{"lineNumber":261,"author":{"gitId":"ruiyangzh"},"content":" LocalDate endTime \u003d parseLocalDate(matcher.group(4));","lastModifiedDate":"2023-09-13"},{"lineNumber":262,"author":{"gitId":"ruiyangzh"},"content":" return new Event(name, isComplete, startTime, endTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":263,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":264,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":265,"author":{"gitId":"ruiyangzh"},"content":" private static Deadline deadlineFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":266,"author":{"gitId":"ruiyangzh"},"content":" String deadlineRegex \u003d \"(.*)\" + Task.DIVIDER + \"(.*)\" + Task.DIVIDER + \"(.*)\";","lastModifiedDate":"2023-09-13"},{"lineNumber":267,"author":{"gitId":"ruiyangzh"},"content":" Matcher matcher \u003d matchString(string, deadlineRegex);","lastModifiedDate":"2023-09-13"},{"lineNumber":268,"author":{"gitId":"ruiyangzh"},"content":" boolean isComplete \u003d parseBoolString(matcher.group(1));","lastModifiedDate":"2023-09-13"},{"lineNumber":269,"author":{"gitId":"ruiyangzh"},"content":" String name \u003d matcher.group(2);","lastModifiedDate":"2023-09-13"},{"lineNumber":270,"author":{"gitId":"ruiyangzh"},"content":" LocalDate deadline \u003d parseLocalDate(matcher.group(3));","lastModifiedDate":"2023-09-13"},{"lineNumber":271,"author":{"gitId":"ruiyangzh"},"content":" return new Deadline(name, isComplete, deadline);","lastModifiedDate":"2023-09-13"},{"lineNumber":272,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":273,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":274,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":275,"author":{"gitId":"ruiyangzh"},"content":" * Produces a task from a string, if the string is valid.","lastModifiedDate":"2023-09-14"},{"lineNumber":276,"author":{"gitId":"ruiyangzh"},"content":" * @param string the string to be transformed.","lastModifiedDate":"2023-09-14"},{"lineNumber":277,"author":{"gitId":"ruiyangzh"},"content":" * @return the task representation of the string if valid.","lastModifiedDate":"2023-09-14"},{"lineNumber":278,"author":{"gitId":"ruiyangzh"},"content":" * @throws InvalidVarException when the string is not in the proper format.","lastModifiedDate":"2023-09-14"},{"lineNumber":279,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":280,"author":{"gitId":"ruiyangzh"},"content":" public static Task taskFromString(String string) throws InvalidVarException {","lastModifiedDate":"2023-09-13"},{"lineNumber":281,"author":{"gitId":"ruiyangzh"},"content":" String[] temp \u003d string.split(Task.DIVIDER, 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":282,"author":{"gitId":"ruiyangzh"},"content":" if (temp.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-13"},{"lineNumber":283,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException();","lastModifiedDate":"2023-09-13"},{"lineNumber":284,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":285,"author":{"gitId":"ruiyangzh"},"content":" String taskIdentifier \u003d temp[0];","lastModifiedDate":"2023-09-13"},{"lineNumber":286,"author":{"gitId":"ruiyangzh"},"content":" String input \u003d temp[1];","lastModifiedDate":"2023-09-13"},{"lineNumber":287,"author":{"gitId":"ruiyangzh"},"content":" switch (taskIdentifier) {","lastModifiedDate":"2023-09-13"},{"lineNumber":288,"author":{"gitId":"ruiyangzh"},"content":" case (\"TD\"):","lastModifiedDate":"2023-09-13"},{"lineNumber":289,"author":{"gitId":"ruiyangzh"},"content":" return todoFromString(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":290,"author":{"gitId":"ruiyangzh"},"content":" case (\"DL\"):","lastModifiedDate":"2023-09-13"},{"lineNumber":291,"author":{"gitId":"ruiyangzh"},"content":" return deadlineFromString(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":292,"author":{"gitId":"ruiyangzh"},"content":" case (\"EV\"):","lastModifiedDate":"2023-09-13"},{"lineNumber":293,"author":{"gitId":"ruiyangzh"},"content":" return eventFromString(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":294,"author":{"gitId":"ruiyangzh"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":295,"author":{"gitId":"ruiyangzh"},"content":" throw new InvalidVarException();","lastModifiedDate":"2023-09-13"},{"lineNumber":296,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":297,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":298,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":298}},{"path":"src/main/java/duke/ParserFunction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import command.Executable;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents a function in the parser that can throw an InvalidVarException.","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"@FunctionalInterface","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"public interface ParserFunction {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" Executable apply(String paramString) throws InvalidVarException;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"ruiyangzh":12}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" * Represents a file on the disk that contains strings.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" private File storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" public Storage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the storage file to the specified path name.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" * @param pathName the path name of the file to be associated with this object.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the file does not exist, and we are unable to create a new file in the specified path.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" public void init(String pathName) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" storage \u003d new File(pathName);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" storage.getParentFile().mkdirs();","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" storage.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * Clears the file to an empty text if possible.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot clear the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" public void clear() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" storage.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" * Writes to the file given an input.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" * @param list An ArrayList representing what we want to write to the disk. (Can be empty.)","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" public void writeToDisk(ArrayList\u003cString\u003e list) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" FileWriter writer \u003d new FileWriter(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" for (String obj : list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" writer.write(obj);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" * Produces an ArrayList of type String that represents the text file associated with this instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" * @return ArrayList of type String that represents the text file associated with this instance. (can be empty)","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" public ArrayList\u003cString\u003e loadFromDisk() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cString\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" Scanner storageScanner \u003d new Scanner(storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" while (storageScanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" result.add(storageScanner.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":65}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.CorruptedFileException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" * A tasklist that stores a group of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * Initializes a tasklist, with its associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" * @param storage the file associated with the tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * Loads the tasklist from the associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @throws CorruptedFileException if the file cannot be interpreted.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" public void loadFromDisk() throws IOException, CorruptedFileException {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" taskList.addAll(stringListToTaskList(storage.loadFromDisk()));","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" * Writes the tasklist to the associated file.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the file cannot be written to.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" public void writeToDisk() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" storage.writeToDisk(taskListToStringList(taskList));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot write the task to disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" public void addTask(Task task) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" assert (task !\u003d null);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" * Removes a task from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" * @param index index of the task to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" * @return whether the index exists in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the index exists and was deleted, but we cannot write the change to disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" public boolean removeTask(int index) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" if (index \u003e taskList.size() || index \u003c 1) {","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" taskList.remove(index - 1);","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" * Clears the tasklist and saves that information to the disk.","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if the disk cannot be written to.","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" public void clear() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" taskList.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" * Sets the done status of the indicated task.","lastModifiedDate":"2023-09-17"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":" * @param targetIndex the index to have its mark set.","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" * @param isToBeMarkedAs the status that the mark is to be changed to.","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":" * @return a boolean representing if the marking was successful.","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" * @throws IOException if we cannot save the marking to the disk.","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" public boolean setMark(int targetIndex, boolean isToBeMarkedAs) throws IOException {","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" if (targetIndex \u003e taskList.size() || targetIndex \u003c 1) {","lastModifiedDate":"2023-09-17"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" if (isToBeMarkedAs) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" taskList.get(targetIndex - 1).markDone();","lastModifiedDate":"2023-09-17"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" taskList.get(targetIndex - 1).markUndone();","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":" writeToDisk();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" * Converts an ArrayList containing strings representing tasks to an arraylist that contains Task objects.","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" * @param stringArrayList the target of conversion.","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" * @return the converted version of stringArrayList.","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" * @throws CorruptedFileException if any of the strings cannot be converted to a task object.","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" private ArrayList\u003cTask\u003e stringListToTaskList(ArrayList\u003cString\u003e stringArrayList) throws CorruptedFileException {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cTask\u003e res \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" for (String s : stringArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":" res.add(Parser.taskFromString(s));","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidVarException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":" throw new CorruptedFileException();","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" return res;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" * Converts an Arraylist containing Tasks to an ArrayList that holds the string representation of those tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" * @param taskArrayList the ArrayList to be converted.","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" * @return the converted ArrayList.","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" private ArrayList\u003cString\u003e taskListToStringList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cString\u003e res \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":" for (Task s : taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" res.add(s.fileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":" return res;","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" * Finds any matching tasks that contain the keyword in their string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" * @param keyword the keyword that is to be searched for.","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" * @return an arrayList containing the tasks that contain the keywords (can be empty.)","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":" public ArrayList\u003cTask\u003e findTasksMatching(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" ArrayList\u003cTask\u003e res \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":" for (Task t: taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":" if (t.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":" res.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":" return res;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"ruiyangzh"},"content":" * Produces a string representation of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"ruiyangzh"},"content":" * @return a string representation of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"ruiyangzh"},"content":" public String listString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"ruiyangzh"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"ruiyangzh"},"content":" return (\"No list, silly!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"ruiyangzh"},"content":" StringBuilder res \u003d new StringBuilder(\"Here\u0027s the list so far.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"ruiyangzh"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"ruiyangzh"},"content":" res.append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"ruiyangzh"},"content":" res.append(i + 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"ruiyangzh"},"content":" res.append(\". \");","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"ruiyangzh"},"content":" res.append(taskList.get(i));","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"ruiyangzh"},"content":" assert !(res.toString().isBlank()); // Should not be blank if we passed the taskList.isEmpty() check.","lastModifiedDate":"2023-09-11"},{"lineNumber":161,"author":{"gitId":"ruiyangzh"},"content":" return res.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":164}},{"path":"src/main/java/duke/UserInterface.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * Represents the user interface of an application.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"public class UserInterface {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" private final Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" private Image userImg;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" private Image dukeImg;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" public UserInterface(Duke duke) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" * Initializes the images into the interface.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" * @param userImagePath relative path of the user image.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" * @param dukeImagePath relative path of the duke image.","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" public void init(String userImagePath, String dukeImagePath) {","lastModifiedDate":"2023-09-17"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" assert(userImagePath !\u003d null \u0026\u0026 dukeImagePath !\u003d null); // Means the arguments are passed wrongly.","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" this.userImg \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(userImagePath)));","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" this.dukeImg \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(dukeImagePath)));","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" this.userImg \u003d null;","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" this.dukeImg \u003d null;","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" * Creates the scene that we want to use to represent the ui.","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" * @return the ui scene.","lastModifiedDate":"2023-09-17"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" public Scene makeScene() {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" spawnUiElements();","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" setUiSettings();","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" setAnchorPaneSettings();","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" addUiFunctionality();","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" return new Scene(mainLayout);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" * Sends the input to the associated chatbot, for it to handle and reply (or not.)","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" public void input() {","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":" assert (input !\u003d null);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"ruiyangzh"},"content":" Label inputLabel \u003d new Label(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"ruiyangzh"},"content":" DialogBox userDialog \u003d DialogBox.getUserDialog(inputLabel, constrUserIV());","lastModifiedDate":"2023-09-17"},{"lineNumber":68,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.getChildren().add(userDialog);","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"ruiyangzh"},"content":" duke.handle(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"ruiyangzh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"ruiyangzh"},"content":" * Outputs a string to the user interface.","lastModifiedDate":"2023-09-17"},{"lineNumber":75,"author":{"gitId":"ruiyangzh"},"content":" * @param output the string to be printed.","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"ruiyangzh"},"content":" public void output(String output) {","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"ruiyangzh"},"content":" assert (output !\u003d null);","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"ruiyangzh"},"content":" Label dukeLabel \u003d new Label(output);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"ruiyangzh"},"content":" DialogBox dukeDialog \u003d DialogBox.getDukeDialog(dukeLabel, constrDukeIV());","lastModifiedDate":"2023-09-17"},{"lineNumber":81,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.getChildren().add(dukeDialog);","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"ruiyangzh"},"content":" private ImageView constrDukeIV() {","lastModifiedDate":"2023-09-17"},{"lineNumber":85,"author":{"gitId":"ruiyangzh"},"content":" if (dukeImg \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":86,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView();","lastModifiedDate":"2023-09-17"},{"lineNumber":87,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":88,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView(dukeImg);","lastModifiedDate":"2023-09-17"},{"lineNumber":89,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":90,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":91,"author":{"gitId":"ruiyangzh"},"content":" private ImageView constrUserIV() {","lastModifiedDate":"2023-09-17"},{"lineNumber":92,"author":{"gitId":"ruiyangzh"},"content":" if (userImg \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":93,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView();","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"ruiyangzh"},"content":" } else {","lastModifiedDate":"2023-09-17"},{"lineNumber":95,"author":{"gitId":"ruiyangzh"},"content":" return new ImageView(userImg);","lastModifiedDate":"2023-09-17"},{"lineNumber":96,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":97,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":98,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":99,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ruiyangzh"},"content":" * Creates the ui elements and saves them to the instance\u0027s variables.","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ruiyangzh"},"content":" private void spawnUiElements() {","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"ruiyangzh"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"ruiyangzh"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"ruiyangzh"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ruiyangzh"},"content":" * Sets the parameters of the ui elements.","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ruiyangzh"},"content":" private void setUiSettings() {","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ruiyangzh"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"ruiyangzh"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"ruiyangzh"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"ruiyangzh"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"ruiyangzh"},"content":" * Sets the AnchorPane settings.","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"ruiyangzh"},"content":" private void setAnchorPaneSettings() {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ruiyangzh"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"ruiyangzh"},"content":" * Adds any ui functionalities and interactables.","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"ruiyangzh"},"content":" private void addUiFunctionality() {","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"ruiyangzh"},"content":" sendButton.setOnMouseClicked((event) -\u003e input());","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"ruiyangzh"},"content":" userInput.setOnAction((event) -\u003e input());","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":143}},{"path":"src/main/java/dukeexception/CorruptedFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents an accessible but incorrectly formatted file.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class CorruptedFileException extends DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a CorruptedFileException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public CorruptedFileException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a CorruptedFileException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public CorruptedFileException(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/dukeexception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * Represents any exceptions that are unique to Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a DukeException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public DukeException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a DukeException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public DukeException(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/dukeexception/FailureInExecuteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents a failure in execution of an Executable.","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class FailureInExecuteException extends DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a FailureInExecuteException.","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" public FailureInExecuteException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a FailureInExecuteException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" public FailureInExecuteException(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":21}},{"path":"src/main/java/dukeexception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents a bad command input.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a InvalidCommandException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a InvalidCommandException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public InvalidCommandException(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/dukeexception/InvalidVarException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package dukeexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * An extension of DukeException, that represents a recognized command with bad arguments.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class InvalidVarException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an InvalidVarException.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" public InvalidVarException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an InvalidVarException with a message.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param s the associated message.","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public InvalidVarException(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":20}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents an extension of a task, containing a deadline in terms of LocalDate.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a deadline.","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param deadline date at which the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" public Deadline(String name, LocalDate deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" super(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a deadline with its mark status.","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * @param isMarked whether the task is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @param deadline date at which the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" public Deadline(String name, boolean isMarked, LocalDate deadline) {","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" super(name, isMarked);","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the Deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable Deadline in String form.","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" * Produces a savable format of the Deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" * (We use dividers to minimize the confusion caused by spaces in names.)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" * @return a String format of Deadline with minimal ambiguity in format.","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" return \"DL\" + DIVIDER + super.fileFormat() + DIVIDER + deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ruiyangzh":52}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" * Represents an extension of a task, containing a start and end time in terms of LocalDate.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" private final LocalDate timeStart;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" private final LocalDate timeEnd;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an event.","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * @param timeStart starting time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param timeEnd ending time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" public Event(String name, LocalDate timeStart, LocalDate timeEnd) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" this.timeStart \u003d timeStart;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" this.timeEnd \u003d timeEnd;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * Constructs an Event, with a boolean representing if it is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" * @param isMarked whether the event is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" * @param timeStart starting time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" * @param timeEnd ending time of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" public Event(String name, boolean isMarked, LocalDate timeStart, LocalDate timeEnd) {","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" super(name, isMarked);","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" this.timeStart \u003d timeStart;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" this.timeEnd \u003d timeEnd;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the Event.","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable Event in String form.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" return (\"[E]\" + super.toString() + \" (from: \" + timeStart.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" + \" to: \" + timeEnd.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" * Produces a saveable format of the Event.","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" * (We use dividers to minimize the confusion caused by spaces in names.)","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" * @return a String format of Event with minimal ambiguity in format.","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" return \"EV\" + DIVIDER + super.fileFormat() + DIVIDER + timeStart + DIVIDER + timeEnd;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"ruiyangzh":58}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * A generic task, containing a name and completion status.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" public static final String DIVIDER \u003d \"%!%\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" private final String name;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" private boolean isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" * Initializes a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" * Initializes a task with its status.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" * @param isComplete whether the task is complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" public Task(String name, boolean isComplete) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" public void markDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" public void markUndone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the Task.","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable Task in String form.","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" if (isComplete) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" return (\"[X] \" + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" return (\"[ ] \" + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" * Formats the task for saving to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" * @return file-formatted task String.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" if (isComplete) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" return (\"TRUE\" + DIVIDER + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ruiyangzh"},"content":" return (\"FALSE\" + DIVIDER + name);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":65}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":" * Represents an extension of a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a to-do.","lastModifiedDate":"2023-09-17"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" * Constructs a to-do with its marking status.","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" * @param name name of the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" * @param isMarked whether the task is marked.","lastModifiedDate":"2023-09-17"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" public ToDo(String name, boolean isMarked) {","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" super(name, isMarked);","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" * Creates a readable string interpretation of the to-do.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" * @return a readable to-do in task form.","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" * Produces a savable format of the to-do.","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" * (We use dividers to minimize the confusion caused by spaces in names.)","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" * @return a String format of to-do with minimal ambiguity in format.","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" public String fileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" return \"TD\" + DIVIDER + super.fileFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":43}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import command.AddTaskExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import command.BindingExecutable;","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import command.DeleteExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import command.HelpExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"import command.ListExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"import command.MarkExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"import command.ShutdownExecutable;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.InvalidVarException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" Parser testParser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" public void simpleCommandBookTest() {","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(ShutdownExecutable.class, testParser.parse(\"bye\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(HelpExecutable.class, testParser.parse(\"help\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(ListExecutable.class, testParser.parse(\"list\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(AddTaskExecutable.class, testParser.parse(\"event name /from 2001-12-01 /to 2003-12-03\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(AddTaskExecutable.class, testParser.parse(\"deadline name /by 2002-02-01\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(AddTaskExecutable.class, testParser.parse(\"todo name\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(MarkExecutable.class, testParser.parse(\"mark 1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(MarkExecutable.class, testParser.parse(\"unmark 1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(DeleteExecutable.class, testParser.parse(\"delete 1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(BindingExecutable.class, testParser.parse(\"rebind help /to h\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" assertInstanceOf(BindingExecutable.class, testParser.parse(\"unbind h\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" } catch (InvalidVarException | InvalidCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" System.out.println(e.getMessage() + e.getCause());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" public void invalidCommandsTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"fljdkfesjflks\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"listlistlistlist\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\" bye\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"deadlinne name /by 2001-01-01\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidCommandException.class, () -\u003e testParser.parse(\"deadLInE name /by 2001-01-01\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"ruiyangzh"},"content":" public void invalidVarsTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"deadline\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"deadline name /by 2001-1-1\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"bye bye\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"mark x\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"mark y\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"deadline /by 2001-99-99\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"delete two\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"todo \"));","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"mark \"));","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(InvalidVarException.class, () -\u003e testParser.parse(\"delete \"));","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":62}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-17"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-17"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"import dukeexception.CorruptedFileException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":" public void corruptionTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":" Storage corrupted \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ruiyangzh"},"content":" TaskList corruptionList \u003d new TaskList(corrupted);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ruiyangzh"},"content":" corrupted.init(\"./data/corruptedStorage.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ruiyangzh"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ruiyangzh"},"content":" assertThrows(CorruptedFileException.class, corruptionList::loadFromDisk);","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ruiyangzh"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ruiyangzh"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ruiyangzh"},"content":" public void markTest() {","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"ruiyangzh"},"content":" Storage tester \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ruiyangzh"},"content":" TaskList testerList \u003d new TaskList(tester);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ruiyangzh"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ruiyangzh"},"content":" tester.init(\"./data/testStorage.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ruiyangzh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ruiyangzh"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(testerList::loadFromDisk);","lastModifiedDate":"2023-09-17"},{"lineNumber":36,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e testerList.addTask(new ToDo(\"name\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertTrue(testerList.setMark(1, true)));","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertTrue(testerList.setMark(1, true)));","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertTrue(testerList.setMark(1, false)));","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(() -\u003e assertFalse(testerList.setMark(-1, true)));","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"ruiyangzh"},"content":" assertDoesNotThrow(tester::clear);","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"ruiyangzh"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ruiyangzh"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ruiyangzh":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ruiyangzh"},"content":"event test1 /from start /to end","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ruiyangzh"},"content":"todo test 2","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ruiyangzh"},"content":"deadline test 3 /by dead line","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ruiyangzh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ruiyangzh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ruiyangzh"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ruiyangzh"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ruiyangzh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ruiyangzh"},"content":"unknown command","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ruiyangzh"},"content":"bye bye","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ruiyangzh"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ruiyangzh":16}}] diff --git a/ruiyangzh_ip_master/commits.json b/ruiyangzh_ip_master/commits.json index 1f322bcd..b5cc5de6 100644 --- a/ruiyangzh_ip_master/commits.json +++ b/ruiyangzh_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ruiyangzh":[{"date":"2023-08-22","commitResults":[{"hash":"440db9aeeda30333f3a2d07dfdf3a5bdc594c596","isMergeCommit":false,"messageTitle":"Stage 1; renamed bot to Luke. Gave it basic startup and end lines.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"b4b3d7887e339512078d5c88bc4f1ae636215f7f","isMergeCommit":false,"messageTitle":"Stage 1; added echo for user input, implemented using scanner.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"49ec4fca52e2d74ba90a950038f95bfcbd4b98f2","isMergeCommit":false,"messageTitle":"Level 2. Added list functionality (implemented using an array of String).","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"18768f5c56b1a3d046c7c8d143a34f1a4ae345cc","isMergeCommit":false,"messageTitle":"Level 3. Implemented Task class, added ability to mark tasks as done or undone. Restructured the holding array from String[] to Task[].","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}},{"hash":"5bae13cf8d960d7a165ebc0816178a86fe351739","isMergeCommit":false,"messageTitle":"Added Deadline, Event and ToDo classes that extend Task.","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"652cff0150e1555af277433a7ce65437c784a4ae","isMergeCommit":false,"messageTitle":"Restructured Duke; with a processInput that handles scanner inputs. Implemented adding each task variant into the list of Duke.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":30}}}]},{"date":"2023-08-24","commitResults":[{"hash":"ef93a524c36e9f440e540bff7b740011c6f03bf1","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting, with defined input/output.","messageBody":"","tags":["A-TextUiTesting","A-Exception"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"79ac7dfd9870a7d858368a128d046337d7787762","isMergeCommit":false,"messageTitle":"Implemented A-Exceptions, partway through Level 5.","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":10}}}]},{"date":"2023-08-25","commitResults":[{"hash":"394be8b9216f35e397bbe960a399aeeda820c391","isMergeCommit":false,"messageTitle":"Implemented Level 5, exceptions added for invalid user inputs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":20}}},{"hash":"89ee93595bf9ea2de0c6a90433fd4b2507a2519f","isMergeCommit":false,"messageTitle":"Implemented A-Collections, using an arraylist to store tasks.","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}},{"hash":"7ea7fcf712239d13035757bb0a0d9637759349db","isMergeCommit":false,"messageTitle":"Implemented Level-6, added delete functionality.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"fbd7257f01ff932db3eec86e663c7f7c9d91f5fb","isMergeCommit":false,"messageTitle":"Implemented Level 7.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":14}}},{"hash":"c1548c4b7e768779cf77bc70860a5f7a76170496","isMergeCommit":false,"messageTitle":"Implemented Level 8. TODO-Handle parsing errors.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d1f2e9fa82b40b33bd70cc515850a7e72d267f70","isMergeCommit":false,"messageTitle":"Partially implement OOP and packages - not complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":328}}},{"hash":"3022c3ccbd54349b1f965d5bed922d2ddfe64e0e","isMergeCommit":false,"messageTitle":"Partially implement OOP and packages - not complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":380,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"aaea03acf9f6c68ee45a6a32fa6c616d1cb51c2d","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP and A-Packages.","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":543,"deletions":311}}},{"hash":"94a5836685a3812631adee9d592618c302145598","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-OOP-and-Packages\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"59578f080e00b1cdb600428c6cbb3df6e60e538d","isMergeCommit":false,"messageTitle":"Implement A-Gradle. Partial stylecheck compliance.","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":273,"deletions":257},"md":{"insertions":2,"deletions":2}}},{"hash":"0e7322d92f9af801c5932b14a7f245d953e694b8","isMergeCommit":false,"messageTitle":"Implement A-JUnit. Package as JAR file, in releases.(Implement A-Jar)","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":4,"deletions":0},"java":{"insertions":130,"deletions":19}}},{"hash":"031de672aeded42ca605895630329b71274dea0b","isMergeCommit":false,"messageTitle":"Implement Level-9.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":4}}},{"hash":"0ba8fb51c76a0d00841d93d3f0e3bc591b295302","isMergeCommit":false,"messageTitle":"Implement A-JavaDoc.","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":269,"deletions":28}}},{"hash":"6320af79a5c222057974abd6299a337edb3d4a81","isMergeCommit":false,"messageTitle":"Implement A-CodingStandard.","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7436e9f82a1022712f93ec9f7dff3fb2cc4e0ee9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f34d02baa277b2a447ac8dd4ae2ddc459743da4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"4b5ab7d9403b6fc05be22709e03601c6a38b4d8c","isMergeCommit":false,"messageTitle":"Miscellaneous merge fixing.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"31e142405446c38c524c84d7cf79d1d85f14ac73","isMergeCommit":false,"messageTitle":"In-progress implementation of JavaFX.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":24,"deletions":2},"java":{"insertions":161,"deletions":16}}}]},{"date":"2023-09-10","commitResults":[{"hash":"bc59a4ca097ea39cc392c9ab7f49804aa3e6db83","isMergeCommit":false,"messageTitle":"Implement Level-10.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":174}}}]},{"date":"2023-09-11","commitResults":[{"hash":"4d503143d59e46fb019b4d64c107c03f33d903fd","isMergeCommit":false,"messageTitle":"Commandable: Refactor naming to Executable","messageBody":"Commandable is not a very suitable name for this interface, since it is not a proper english word and does not represent what it does. Since the shared method is named execute(), this schema makes more sense.\n\nReplace all instances of the word \"Commandable\" with the word \"Executable\", for a more accurate representation of the name.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":141,"deletions":120}}},{"hash":"2db2236058323397dd69931ddf66f778332a061a","isMergeCommit":false,"messageTitle":"In-progress for A-Assertions","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":3}}}]},{"date":"2023-09-12","commitResults":[{"hash":"0c01883c7fec86858cd03f8cae77b0db522b5922","isMergeCommit":false,"messageTitle":"Add JavaDocs for public methods","messageBody":"Previously, most methods were missing JavaDocs documentations. This may hinder development for those who are new to the project.\n\nJavadocs are to be added to most public methods.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":66}}},{"hash":"ac5b8f1d080c21ce4e2e002c8ee74f0385ab4044","isMergeCommit":false,"messageTitle":"Add assertions in various places","messageBody":"Assertions were not present in earlier code, but adding them in could improve code checking by spotting errors early.\n\nAdd assertions into the bot (some are done in previous commits.)\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}}]},{"date":"2023-09-13","commitResults":[{"hash":"921edb3ed8f37291a5de3f409d00d2539432a728","isMergeCommit":false,"messageTitle":"Inprogress refactoring of Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":119}}},{"hash":"1a2b5815519dd36cb7cd9765dbed4cb2d7368f8e","isMergeCommit":false,"messageTitle":"Refactor Parser and UserInterface","messageBody":"Parser and UserInterface had very long methods in prior commits, for example sceneMaker() and parse(). This made the code difficult to understand.\n\nIn adherence with code quality standards, refactor and split up the two mentioned methods to increase readability and clarity.\n","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":217}}},{"hash":"a5d281a90c531377a284580072e7beec79388cf3","isMergeCommit":false,"messageTitle":"In progress refactoring of TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":33}}},{"hash":"e882470c5b7500da56651d85012f4e94e78bc6f3","isMergeCommit":false,"messageTitle":"TaskList : refactor stringListToTaskList","messageBody":"TaskList had a very unwieldy method stringListToTaskList that was difficult to understand.\n\nRefactor the method and split it up into smaller methods.\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":49}}}]},{"date":"2023-09-14","commitResults":[{"hash":"92cc40d2e57e1a27138aed6a50b2232b41e1b259","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ruiyangzh/branch-A-Assertions","messageBody":"Add Assertions into various points in code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"6f55cd91f93283a07496b5cfe1280b5b4a23af50","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tsrc/main/java/command/AddTaskExecutable.java\n#\tsrc/main/java/command/DeleteExecutable.java\n#\tsrc/main/java/command/FindCommand.java\n#\tsrc/main/java/command/MarkExecutable.java\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/duke/UserInterface.java\n","fileTypesAndContributionMap":{}},{"hash":"b624ef665c96849c5be7ddf274f0d5cdc46dc03c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-A-CodeQuality\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"17a8d15691adb7a803f60650feea8992ce61518b","isMergeCommit":false,"messageTitle":"Merge conflict resolution","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":105}}},{"hash":"0d1f348b88bdd3aeba09f565f24c7e2ba6ac2966","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ruiyangzh/branch-A-CodeQuality","messageBody":"Code quality refactoring","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"16efbffccd508bb89332b27b5a5035d53d201dae","isMergeCommit":false,"messageTitle":"Add 2 new commands, rebind and unbind","messageBody":"Added the ability to rebind commands to a custom string (must not contain whitespaces), and use them as shorthand. The binds can also be removed.\n","tags":["BCD-Extensions"],"fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":8}}}]},{"date":"2023-09-17","commitResults":[{"hash":"75f5f6815e74ba4c3da29fb22f8382f5f4a739dd","isMergeCommit":false,"messageTitle":"Refactor Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":57}}},{"hash":"b8c33f3805900d5805c4672f42d7fb69eb43e20b","isMergeCommit":false,"messageTitle":"Refactor Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"f59d4f476f8086d5d99f61855a034ffddd005f49","isMergeCommit":false,"messageTitle":"Bugfix binding commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":25}}},{"hash":"fb394a649020b470afb11fbbe0d0b8bed3559cb9","isMergeCommit":false,"messageTitle":"Bugfix TaskList and UserInterface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}},{"hash":"7aab86ec7192272060cd82ecb8d26fcaf224ddf5","isMergeCommit":false,"messageTitle":"Prepare README.md and documentation","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2},"md":{"insertions":298,"deletions":12}}},{"hash":"498e8a342e2cc860951d8a4e7d551b85be59ccb0","isMergeCommit":false,"messageTitle":"Fix tests failing due to recent changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"104164f2ad026fab28034335bcfb952cfcb20509","isMergeCommit":false,"messageTitle":"Fix tests failing due to recent changes","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":19}}}]}]},"authorFileTypeContributionMap":{"ruiyangzh":{"java":1688,"md":291,"fxml":0,"sh":0,"bat":0,"gradle":29,"txt":20}},"authorContributionVariance":{"ruiyangzh":151881.3},"authorDisplayNameMap":{"ruiyangzh":"CS2103T-F11-3 ZHAO..YANG"}} +{"authorDailyContributionsMap":{"ruiyangzh":[{"date":"2023-08-22","commitResults":[{"hash":"440db9aeeda30333f3a2d07dfdf3a5bdc594c596","isMergeCommit":false,"messageTitle":"Stage 1; renamed bot to Luke. Gave it basic startup and end lines.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"b4b3d7887e339512078d5c88bc4f1ae636215f7f","isMergeCommit":false,"messageTitle":"Stage 1; added echo for user input, implemented using scanner.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"49ec4fca52e2d74ba90a950038f95bfcbd4b98f2","isMergeCommit":false,"messageTitle":"Level 2. Added list functionality (implemented using an array of String).","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"18768f5c56b1a3d046c7c8d143a34f1a4ae345cc","isMergeCommit":false,"messageTitle":"Level 3. Implemented Task class, added ability to mark tasks as done or undone. Restructured the holding array from String[] to Task[].","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}},{"hash":"5bae13cf8d960d7a165ebc0816178a86fe351739","isMergeCommit":false,"messageTitle":"Added Deadline, Event and ToDo classes that extend Task.","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"652cff0150e1555af277433a7ce65437c784a4ae","isMergeCommit":false,"messageTitle":"Restructured Duke; with a processInput that handles scanner inputs. Implemented adding each task variant into the list of Duke.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":30}}}]},{"date":"2023-08-24","commitResults":[{"hash":"ef93a524c36e9f440e540bff7b740011c6f03bf1","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting, with defined input/output.","messageBody":"","tags":["A-TextUiTesting","A-Exception"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"79ac7dfd9870a7d858368a128d046337d7787762","isMergeCommit":false,"messageTitle":"Implemented A-Exceptions, partway through Level 5.","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":10}}}]},{"date":"2023-08-25","commitResults":[{"hash":"394be8b9216f35e397bbe960a399aeeda820c391","isMergeCommit":false,"messageTitle":"Implemented Level 5, exceptions added for invalid user inputs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":20}}},{"hash":"89ee93595bf9ea2de0c6a90433fd4b2507a2519f","isMergeCommit":false,"messageTitle":"Implemented A-Collections, using an arraylist to store tasks.","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}},{"hash":"7ea7fcf712239d13035757bb0a0d9637759349db","isMergeCommit":false,"messageTitle":"Implemented Level-6, added delete functionality.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"fbd7257f01ff932db3eec86e663c7f7c9d91f5fb","isMergeCommit":false,"messageTitle":"Implemented Level 7.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":14}}},{"hash":"c1548c4b7e768779cf77bc70860a5f7a76170496","isMergeCommit":false,"messageTitle":"Implemented Level 8. TODO-Handle parsing errors.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d1f2e9fa82b40b33bd70cc515850a7e72d267f70","isMergeCommit":false,"messageTitle":"Partially implement OOP and packages - not complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":328}}},{"hash":"3022c3ccbd54349b1f965d5bed922d2ddfe64e0e","isMergeCommit":false,"messageTitle":"Partially implement OOP and packages - not complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":380,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"aaea03acf9f6c68ee45a6a32fa6c616d1cb51c2d","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP and A-Packages.","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":543,"deletions":311}}},{"hash":"94a5836685a3812631adee9d592618c302145598","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-OOP-and-Packages\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"59578f080e00b1cdb600428c6cbb3df6e60e538d","isMergeCommit":false,"messageTitle":"Implement A-Gradle. Partial stylecheck compliance.","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":273,"deletions":257},"md":{"insertions":2,"deletions":2}}},{"hash":"0e7322d92f9af801c5932b14a7f245d953e694b8","isMergeCommit":false,"messageTitle":"Implement A-JUnit. Package as JAR file, in releases.(Implement A-Jar)","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":4,"deletions":0},"java":{"insertions":130,"deletions":19}}},{"hash":"031de672aeded42ca605895630329b71274dea0b","isMergeCommit":false,"messageTitle":"Implement Level-9.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":4}}},{"hash":"0ba8fb51c76a0d00841d93d3f0e3bc591b295302","isMergeCommit":false,"messageTitle":"Implement A-JavaDoc.","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":269,"deletions":28}}},{"hash":"6320af79a5c222057974abd6299a337edb3d4a81","isMergeCommit":false,"messageTitle":"Implement A-CodingStandard.","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7436e9f82a1022712f93ec9f7dff3fb2cc4e0ee9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f34d02baa277b2a447ac8dd4ae2ddc459743da4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"4b5ab7d9403b6fc05be22709e03601c6a38b4d8c","isMergeCommit":false,"messageTitle":"Miscellaneous merge fixing.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"31e142405446c38c524c84d7cf79d1d85f14ac73","isMergeCommit":false,"messageTitle":"In-progress implementation of JavaFX.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":24,"deletions":2},"java":{"insertions":161,"deletions":16}}}]},{"date":"2023-09-10","commitResults":[{"hash":"bc59a4ca097ea39cc392c9ab7f49804aa3e6db83","isMergeCommit":false,"messageTitle":"Implement Level-10.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":174}}}]},{"date":"2023-09-11","commitResults":[{"hash":"4d503143d59e46fb019b4d64c107c03f33d903fd","isMergeCommit":false,"messageTitle":"Commandable: Refactor naming to Executable","messageBody":"Commandable is not a very suitable name for this interface, since it is not a proper english word and does not represent what it does. Since the shared method is named execute(), this schema makes more sense.\n\nReplace all instances of the word \"Commandable\" with the word \"Executable\", for a more accurate representation of the name.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":141,"deletions":120}}},{"hash":"2db2236058323397dd69931ddf66f778332a061a","isMergeCommit":false,"messageTitle":"In-progress for A-Assertions","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":3}}}]},{"date":"2023-09-12","commitResults":[{"hash":"0c01883c7fec86858cd03f8cae77b0db522b5922","isMergeCommit":false,"messageTitle":"Add JavaDocs for public methods","messageBody":"Previously, most methods were missing JavaDocs documentations. This may hinder development for those who are new to the project.\n\nJavadocs are to be added to most public methods.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":66}}},{"hash":"ac5b8f1d080c21ce4e2e002c8ee74f0385ab4044","isMergeCommit":false,"messageTitle":"Add assertions in various places","messageBody":"Assertions were not present in earlier code, but adding them in could improve code checking by spotting errors early.\n\nAdd assertions into the bot (some are done in previous commits.)\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}}]},{"date":"2023-09-13","commitResults":[{"hash":"921edb3ed8f37291a5de3f409d00d2539432a728","isMergeCommit":false,"messageTitle":"Inprogress refactoring of Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":119}}},{"hash":"1a2b5815519dd36cb7cd9765dbed4cb2d7368f8e","isMergeCommit":false,"messageTitle":"Refactor Parser and UserInterface","messageBody":"Parser and UserInterface had very long methods in prior commits, for example sceneMaker() and parse(). This made the code difficult to understand.\n\nIn adherence with code quality standards, refactor and split up the two mentioned methods to increase readability and clarity.\n","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":217}}},{"hash":"a5d281a90c531377a284580072e7beec79388cf3","isMergeCommit":false,"messageTitle":"In progress refactoring of TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":33}}},{"hash":"e882470c5b7500da56651d85012f4e94e78bc6f3","isMergeCommit":false,"messageTitle":"TaskList : refactor stringListToTaskList","messageBody":"TaskList had a very unwieldy method stringListToTaskList that was difficult to understand.\n\nRefactor the method and split it up into smaller methods.\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":49}}}]},{"date":"2023-09-14","commitResults":[{"hash":"92cc40d2e57e1a27138aed6a50b2232b41e1b259","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ruiyangzh/branch-A-Assertions","messageBody":"Add Assertions into various points in code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"6f55cd91f93283a07496b5cfe1280b5b4a23af50","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tsrc/main/java/command/AddTaskExecutable.java\n#\tsrc/main/java/command/DeleteExecutable.java\n#\tsrc/main/java/command/FindCommand.java\n#\tsrc/main/java/command/MarkExecutable.java\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/duke/UserInterface.java\n","fileTypesAndContributionMap":{}},{"hash":"b624ef665c96849c5be7ddf274f0d5cdc46dc03c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-A-CodeQuality\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"17a8d15691adb7a803f60650feea8992ce61518b","isMergeCommit":false,"messageTitle":"Merge conflict resolution","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":105}}},{"hash":"0d1f348b88bdd3aeba09f565f24c7e2ba6ac2966","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ruiyangzh/branch-A-CodeQuality","messageBody":"Code quality refactoring","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"16efbffccd508bb89332b27b5a5035d53d201dae","isMergeCommit":false,"messageTitle":"Add 2 new commands, rebind and unbind","messageBody":"Added the ability to rebind commands to a custom string (must not contain whitespaces), and use them as shorthand. The binds can also be removed.\n","tags":["BCD-Extensions"],"fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":8}}}]},{"date":"2023-09-17","commitResults":[{"hash":"75f5f6815e74ba4c3da29fb22f8382f5f4a739dd","isMergeCommit":false,"messageTitle":"Refactor Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":57}}},{"hash":"b8c33f3805900d5805c4672f42d7fb69eb43e20b","isMergeCommit":false,"messageTitle":"Refactor Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"f59d4f476f8086d5d99f61855a034ffddd005f49","isMergeCommit":false,"messageTitle":"Bugfix binding commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":25}}},{"hash":"fb394a649020b470afb11fbbe0d0b8bed3559cb9","isMergeCommit":false,"messageTitle":"Bugfix TaskList and UserInterface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}},{"hash":"7aab86ec7192272060cd82ecb8d26fcaf224ddf5","isMergeCommit":false,"messageTitle":"Prepare README.md and documentation","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2},"md":{"insertions":298,"deletions":12}}},{"hash":"498e8a342e2cc860951d8a4e7d551b85be59ccb0","isMergeCommit":false,"messageTitle":"Fix tests failing due to recent changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"104164f2ad026fab28034335bcfb952cfcb20509","isMergeCommit":false,"messageTitle":"Fix tests failing due to recent changes","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":19}}}]},{"date":"2023-09-18","commitResults":[{"hash":"ae846c27e5e54f0ca0264ba84017248c016f1277","isMergeCommit":false,"messageTitle":"Bugfix and add Ui.png","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"ruiyangzh":{"java":1689,"md":291,"fxml":0,"sh":0,"bat":0,"gradle":29,"txt":20}},"authorContributionVariance":{"ruiyangzh":148300.67},"authorDisplayNameMap":{"ruiyangzh":"CS2103T-F11-3 ZHAO..YANG"}} diff --git a/summary.json b/summary.json index 424565f5..b6db006a 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"3bad16bb3d","reportGeneratedTime":"Mon Sep 18 09:13:39 2023 UTC+08:00","reportGenerationTime":" 2 minute(s) 22.20 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-18","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":"Mon Sep 18 12:29:53 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 59.27 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-18","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/tllshan_ip_master/authorship.json b/tllshan_ip_master/authorship.json index c6a46027..acf1fd7f 100644 --- a/tllshan_ip_master/authorship.json +++ b/tllshan_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":"tllshan"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-14"},{"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":"tllshan"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"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":"tllshan"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-14"},{"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":"tllshan"},"content":"javafx {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" version \u003d \"17\"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"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":{"tllshan":21,"-":41}},{"path":"src/main/data/task-list.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":" todo read book","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":" todo read book","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":" todo read book","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"tllshan":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import duke.ui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * The {@code Duke} class is the main class for the Duke task manager application.","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * It initializes and coordinates the application\u0027s components, such as the UI, parser, storage, and task list.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" * The class also defines the main method for launching the application and the main loop for user interaction.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"public class Duke {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" public static final String PATH \u003d \"src/main/data/task-list.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * Initializes the Duke application by creating instances of the UI, parser, and storage.","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" public Duke() {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" this.storage \u003d new Storage(parser);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" this.tasks \u003d new TaskList(storage.loadTasksFromFile(), ui);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" * The main entry point of the Duke application.","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" * Initializes the application, runs the main loop, and catches and displays exceptions.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" duke.run();","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" return ui.displayFarewell();","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" Command command \u003d parser.parseInput(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" String response \u003d executeCommand(command);","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" return response;","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" return \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" * Initiates the main loop of the Duke application.","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" * Reads user input, processes commands, and provides responses until the user chooses to exit.","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" * Catches and displays exceptions.","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" private void run() {","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" try (Scanner sc \u003d new Scanner(System.in)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" tasks \u003d new TaskList(storage.loadTasksFromFile(), ui);","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" ui.displayGreeting();","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" Command command \u003d parser.parseInput(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" executeCommand(command);","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" input \u003d sc.nextLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" ui.displayFarewell();","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" * Executes the specified command by invoking corresponding methods on the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" * ","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" * @param command The parsed user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" private String executeCommand(Command command) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" String action \u003d command.getAction();","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d command.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" String response;","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" switch (action) {","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.printList();","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.markTask(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.unmarkTask(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" case \"delete\":","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.deleteTask(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" case \"find\":","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.find(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.addTask(parser.parseTask(action, taskDescription));","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"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":123,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" return response;","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":126}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" stage.show();","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":30}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" * The Command class represents a command provided by the user for the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" * It encapsulates both the action and task description specified by the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private final String action;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" * Constructs a new Command with the specified action and task description.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * @param action The action to be performed, such as adding, marking, unmarking, or deleting a task.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description or details associated with the command, typically used for task creation.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" public Command(String action, String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" this.action \u003d action;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public String getAction() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" return action;","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":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" return taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":29}},{"path":"src/main/java/duke/data/exception/CCException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" * The CCException class represents a custom exception specific to the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" * It is used to handle and convey application-specific errors and exceptional conditions.","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"public class CCException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" * Constructs a new CCException with the specified error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" public CCException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":17}},{"path":"src/main/java/duke/data/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * The Deadline class represents a deadline task in the task management application.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" * It extends the parent Task class and includes information about the task\u0027s due date.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * Deadline tasks are used to track tasks with specific deadlines.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" private final LocalDate dueDate; //the due date of the deadline task","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * Constructs a Deadline object with the provided task description, task name, and due date.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * @param name The name or title of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * @param dueDate The due date of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public Deadline(String taskDescription, String name, LocalDate dueDate) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the deadline task for display purposes.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, and due date.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][D] %s (by: %s)\", super.checkDone(), super.getName(), super.formatDate(dueDate));","lastModifiedDate":"2023-09-07"},{"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":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * Gets the input representation of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" * The input format is suitable for creating and parsing deadline tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" * @return The input representation of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" public String getInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" return \"deadline \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":45}},{"path":"src/main/java/duke/data/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * The Event class represents an event task in the task management application.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" * It extends the parent Task class and includes information about the event\u0027s start and end dates.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * Event tasks are used to schedule events with specific start and end times.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" private final LocalDate start; //the start date of the event","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private final LocalDate end; //the end date of the event","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * Constructs an Event object with the provided task description, event name, start date, and end date.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * @param name The name or title of the event.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @param start The start date of the event.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" * @param end The end date of the event.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" public Event(String taskDescription, String name, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the event task for display purposes.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, start date, and end date.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" super.checkDone(),","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" super.getName(),","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" super.formatDate(start),","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" super.formatDate(end));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * Gets the input representation of the event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * The input format is suitable for creating and parsing event tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" * @return The input representation of the event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" public String getInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" return \"event \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":53}},{"path":"src/main/java/duke/data/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" * The abstract Task class represents a generic task with a task description, name, and completion status.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * Subclasses such as ToDo, Deadline, and Event provide specific task types.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * Constructs a new Task with the provided task description and name.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @param name The name or title of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public Task(String taskDescription, String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" protected String getName() {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" return this.name;","lastModifiedDate":"2023-08-24"},{"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":" public String getTaskDescription() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return this.taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * Gets a formatted input string for the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" * @return The formatted input string representing the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" public abstract String getInput();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * Gets a formatted string for printing the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * @return The formatted string for printing the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" public abstract String getTaskForPrinting();","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" * Gets a formatted string for saving the task, including its completion status.","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" * @return The formatted string for saving the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" public String getTaskForSaving() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" String done \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" done \u003d \"X\";","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" done \u003d \" \";","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" return done + getInput(); //append completion status character to input","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" * Sets the completion status of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * @param isDone True if the task is completed; false otherwise.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" public void setDone(boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" * Checks the completion status of the task and returns \u0027X\u0027 if completed, or \u0027 \u0027 if not completed.","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" * @return \u0027X\u0027 if the task is completed; \u0027 \u0027 if not completed.","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" protected String checkDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" * Formats a given LocalDate object into a string using the \"dd/MM/yyyy\" pattern.","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" * @param date The LocalDate object to be formatted.","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" * @return The formatted date string.","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":93}},{"path":"src/main/java/duke/data/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" * The ToDo class represents a to-do task in the task management application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" * It extends the base Task class and includes a description of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * ToDo tasks are used to represent tasks without specific deadlines or start times.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" * Constructs a ToDo object with the provided task description.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" public ToDo(String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" super(taskDescription, taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the to-do task for display purposes.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][T] %s\", super.checkDone(), super.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" * Gets the input representation of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * The input format is suitable for creating and parsing to-do tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * @return The input representation of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" public String getInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" return \"todo \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":39}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Event;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import duke.data.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * The Parser class is responsible for parsing user input and converting it into commands and task objects.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * It supports the creation of ToDo, Deadline, and Event tasks from user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * This class also handles parsing of task details from data files.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"public class Parser {","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":" * Parses the input command and creates a Command object.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" * This method extracts the action and task description from the input and returns a Command object.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" * @param input The input command provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing, such as an empty input.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" public Command parseInput(String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Empty input detected.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" int space \u003d input.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" String action \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" if (space \u003d\u003d -1) { //input is a single word","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" action \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" //split input into action and description","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" action \u003d input.substring(0, space);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" description \u003d input.substring(space + 1, input.length());","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" return new Command(action, description);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"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":47,"author":{"gitId":"tllshan"},"content":" * This method extracts task details from the input, creates a Command object, and parses the task type.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" * @param fileLine The input line from the data file containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" public Task parseTaskFromFile(String fileLine) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" String input \u003d fileLine.substring(1); //remove completion status character to extract task input","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" Command command \u003d parseInput(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" Task task \u003d parseTask(command.getAction(), command.getTaskDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" //Extract the task completion status character from the file line.","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" //If it is marked as completed (\u0027X\u0027), set the task as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" if (fileLine.charAt(0) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" * Parses a Task object based on its type and input details.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * @param type The type of the task (todo, deadline, event).","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing or task creation.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" public Task parseTask(String type, String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" task \u003d parseToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" task \u003d parseDeadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" task \u003d parseEvent(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid task type.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" }","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":" * Parses the input string to create a new ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" * @return A new ToDo task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" private ToDo parseToDo (String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description and due date of the Deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" * @return A new Deadline task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" private Deadline parseDeadline(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" String dueDate \u003d fields[1].trim();","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || dueDate.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for deadline detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" return new Deadline(taskDescription, name, parseDate(dueDate));","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description, start date, and end date of the Event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":" * @return A new Event task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"tllshan"},"content":" private Event parseEvent(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/from|/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"tllshan"},"content":" String start \u003d fields[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"tllshan"},"content":" String end \u003d fields[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for event detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"tllshan"},"content":" return new Event(taskDescription, name, parseDate(start), parseDate(end));","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"tllshan"},"content":" * Parses a string into a LocalDate object.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"tllshan"},"content":" * @param date The string containing a date to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"tllshan"},"content":" * @return A LocalDate object representing the parsed date.","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"tllshan"},"content":" private static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"tllshan"},"content":" return LocalDate.parse(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"tllshan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"tllshan"},"content":" System.out.println(\"Error parsing date: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":161}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.io.BufferedReader;","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.FileReader;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * The Storage class is responsible for loading and saving tasks from/to a data file for the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * It interacts with the data file to read and write task information, ensuring data persistence.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * Constructs a new Storage object with the specified parser.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @param parser The parser used to interpret and convert data from the data file.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public Storage(Parser parser) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" this.parser \u003d parser;","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":" * Loads tasks from the data file and returns them as an ArrayList of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * If the data file doesn\u0027t exist, a new file is created.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" * @return An ArrayList containing the loaded tasks, or null in case of errors.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(Duke.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" String currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" while (currLine !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" Task task \u003d parser.parseTaskFromFile(currLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while adding tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" System.out.println(\"HERE\");","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * Saves tasks from the provided TaskList to the data file.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" * @param taskList The TaskList containing tasks to be saved.","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" public void saveTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(Duke.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d task.getTaskForSaving() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" writer.append(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":86}},{"path":"src/main/java/duke/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.tasklist;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.util.Iterator;","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 TaskList class represents a collection of tasks managed by the ChatterChicken task manager.","lastModifiedDate":"2023-09-07"},{"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 final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" * Constructs a new TaskList with the provided list of tasks and a UI component for user interactions.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * @param ui The user interface component for displaying messages and user interactions.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Ui ui) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-07"},{"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":" * Adds a new task to the task list based on the provided Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the added task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" return ui.displayAddTask(task, taskList.size());","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * Marks a task as done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the marked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to mark as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"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":50,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" public String markTask(String input) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" return ui.displayMarkTask(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for marking list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" * Unmarks a previously marked task as not done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the unmarked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to unmark.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"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":67,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" public String unmarkTask(String input) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" task.setDone(false);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" return ui.displayUnmarkTask(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"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-27"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" * Deletes a task from the task list based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message after deleting the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"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":84,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" public String deleteTask(String input) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" int index \u003d getIndex(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" return ui.displayDeleteTask(task, taskList.size());","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" public String find(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" if(task.getTaskDescription().contains(input)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" return ui.displayMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" * Retrieves the index of a task based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information and index as the last character.","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" * @return The index of the task parsed from the input.","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" private int getIndex(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" return input.charAt(input.length() - 1) - \u00270\u0027 - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" * Prints the list of tasks with their respective indexes.","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" public String printList() {","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" return ui.displayList(taskList);","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" return taskList.iterator();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":127}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":56}},{"path":"src/main/java/duke/ui/Gui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"public class Gui extends Application {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" private Scene scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"// private Image user \u003d new Image(this.getClass().getResourceAsStream(\"resources/images/DaUser.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"// private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"resources/images/DaDuke.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" stage.show();","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" });","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" });","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":"// sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":"// handleUserInput();","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":"// });","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"//","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":"// userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":"// handleUserInput();","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":"// });","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" return textToAdd;","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":"// private void handleUserInput() {","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":"// Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":"// Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":"// dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":"// new DialogBox(userText, new ImageView(user)),","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":"// new DialogBox(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":"// );","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":"// userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":"// }","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":129}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"public class MainWindow {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" private Duke duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" private static final Image userImage \u003d new Image(DialogBox.class.getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" private static final Image dukeImage \u003d new Image(DialogBox.class.getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" private void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public void setDuke(Duke duke) {","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" );","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":49}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * The Ui class handles user interface interactions for the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" * It provides methods to display messages and task-related information to the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private static final String LINE \u003d \"\\n _____________________________________________________________________________\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" private static final String INDENT \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" private static final String INDENT_BIG \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * Displays a greeting message to the user to introduce ChatterChicken.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public void displayGreeting() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Hello! I\u0027m ChatterChicken!\\n\" + INDENT + \"What can I do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * Displays a farewell message to the user as they exit the ChatterChicken application.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" public String displayFarewell() {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" public String displayAddTask(Task task, int size) {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" public String displayDeleteTask(Task task, int size) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in your list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" public String displayMarkTask(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting();","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" public String displayUnmarkTask(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" return INDENT + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting();","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" public String displayMatchingTasks(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" String result \u003d INDENT + \"Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" result +\u003d \"\\n\" + INDENT_BIG + index + \".\" + task.getTaskForPrinting();","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" index++;","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" return result;","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" * @param taskList The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" public String displayList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" String result \u003d INDENT + \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" result +\u003d \"\\n\" + INDENT_BIG + (i + 1) + \".\" + taskList.get(i).getTaskForPrinting();","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" return result;","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" * Prints a message to the screen, surrounded by the predefined line separator.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" private void printToScreen(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + message + LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tllshan":106}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"tllshan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":12,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":13,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"tllshan":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Event;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import duke.data.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" public void parseTask_invalidTaskType_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"invalid\", \"taskDescription\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" fail(\"Task was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyToDoDescription_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"todo\", \"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" fail(\"ToDo was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" public void parseTask_validToDo_returnsToDo() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" task \u003d parser.parseTask(\"todo\", \"read book\");","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" assertTrue(task instanceof ToDo);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" assertEquals(\"todo read book\", task.getInput());","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyDeadlineDescription_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"deadline\", \"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" fail(\"Deadline was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyDeadlineEndDate_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"deadline\", \"return book /by \");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" fail(\"Deadline was successfully constructed with empty end date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" public void parseTask_validDeadline_returnsDeadline() {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" task \u003d parser.parseTask(\"deadline\", \"return book /by 2023-01-09\");","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" assertTrue(task instanceof Deadline);","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" assertEquals(\"deadline return book /by 2023-01-09\", task.getInput());","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyEventDescription_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"event\", \"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" fail(\"Event was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyEventStartDate_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"event\", \"holiday /from /to 2023-12-25\");","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" fail(\"Event was successfully constructed with empty start date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyEventEndDate_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"event\", \"holiday /from 2023-12-02 /to \");","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" fail(\"Event was successfully constructed with empty end date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" public void parseTask_validEvent_returnsEvent() {","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" task \u003d parser.parseTask(\"event\", \"holiday /from 2023-12-02 /to 2023-12-25\");","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"tllshan"},"content":" assertTrue(task instanceof Event);","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"tllshan"},"content":" assertEquals(\"event holiday /from 2023-12-02 /to 2023-12-25\", task.getInput());","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"tllshan":135}},{"path":"src/test/java/duke/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.tasklist;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import duke.data.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" public void deleteTask_invalidIndex_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e(), new Ui());","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" taskList.deleteTask(\"-1\");","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" fail(\"Invalid index was deleted from task list.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" public void deleteTask_validIndex_taskDeletedFromList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e(), new Ui());","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" ToDo toBeDeleted \u003d new ToDo(\"delete this\");","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" taskList.addTask(new ToDo(\"read book 1\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" taskList.addTask(new ToDo(\"read book 2\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" taskList.addTask(toBeDeleted);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" taskList.addTask(new ToDo(\"read book 3\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" taskList.deleteTask(\"3\");","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" assertFalse(task.equals(toBeDeleted));","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"tllshan":47}},{"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":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"# ChatterChicken","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"\u003e\"Your mind is for having ideas, not holding them.\" - David Allen ([source](https://dansilvestre.com/productivity-quotes/))","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"ChatterChicken frees your mind of having to remember things you need to do. It\u0027s","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"- text-based","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"- easy to learn","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"- ~~FAST~~ _SUPER_ FAST to use","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"All you need to do is,","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"1. download it from [here](https://github.com/tllshan/ip/archive/refs/tags/A-Jar.zip).","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"2. double-click it.","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"4. let it manage your tasks for you 😄","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"And it is **FREE**!","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"Features:","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"---","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"If you are a Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"```java","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":"public class Main {","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tllshan":29,"-":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":"tllshan"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-14"},{"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":"tllshan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"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":"tllshan"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-14"},{"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":"tllshan"},"content":"javafx {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" version \u003d \"17\"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"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":{"tllshan":21,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import duke.ui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * The {@code Duke} class is the main class for the Duke task manager application.","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * It initializes and coordinates the application\u0027s components, such as the UI, parser, storage, and task list.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" * The class also defines the main method for launching the application and the main loop for user interaction.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"public class Duke {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" public static final String PATH \u003d \"src/main/data/task-list.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * Initializes the Duke application by creating instances of the UI, parser, and storage.","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" public Duke() {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" this.storage \u003d new Storage(parser);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" this.tasks \u003d new TaskList(storage.loadTasksFromFile(), ui);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" * The main entry point of the Duke application.","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" * Initializes the application, runs the main loop, and catches and displays exceptions.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" duke.run();","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" return ui.displayFarewell();","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" Command command \u003d parser.parseInput(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" String response \u003d executeCommand(command);","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" return response;","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" return \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" * Initiates the main loop of the Duke application.","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" * Reads user input, processes commands, and provides responses until the user chooses to exit.","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" * Catches and displays exceptions.","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" private void run() {","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" try (Scanner sc \u003d new Scanner(System.in)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" tasks \u003d new TaskList(storage.loadTasksFromFile(), ui);","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" ui.displayGreeting();","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" Command command \u003d parser.parseInput(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" executeCommand(command);","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" input \u003d sc.nextLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" ui.displayFarewell();","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" * Executes the specified command by invoking corresponding methods on the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" * ","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" * @param command The parsed user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" private String executeCommand(Command command) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" String action \u003d command.getAction();","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d command.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" String response;","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" switch (action) {","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.printList();","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.markTask(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.unmarkTask(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" case \"delete\":","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.deleteTask(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" case \"find\":","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.find(taskDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" response \u003d tasks.addTask(parser.parseTask(action, taskDescription));","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"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":123,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" return response;","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":126}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" stage.show();","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":30}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" * The Command class represents a command provided by the user for the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" * It encapsulates both the action and task description specified by the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private final String action;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" * Constructs a new Command with the specified action and task description.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * @param action The action to be performed, such as adding, marking, unmarking, or deleting a task.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description or details associated with the command, typically used for task creation.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" public Command(String action, String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" this.action \u003d action;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public String getAction() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" return action;","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":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" return taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":29}},{"path":"src/main/java/duke/data/exception/CCException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" * The CCException class represents a custom exception specific to the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" * It is used to handle and convey application-specific errors and exceptional conditions.","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"public class CCException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" * Constructs a new CCException with the specified error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" public CCException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":17}},{"path":"src/main/java/duke/data/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * The Deadline class represents a deadline task in the task management application.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" * It extends the parent Task class and includes information about the task\u0027s due date.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * Deadline tasks are used to track tasks with specific deadlines.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" private final LocalDate dueDate; //the due date of the deadline task","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * Constructs a Deadline object with the provided task description, task name, and due date.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * @param name The name or title of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * @param dueDate The due date of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public Deadline(String taskDescription, String name, LocalDate dueDate) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the deadline task for display purposes.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, and due date.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][D] %s (by: %s)\", super.checkDone(), super.getName(), super.formatDate(dueDate));","lastModifiedDate":"2023-09-07"},{"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":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * Gets the input representation of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" * The input format is suitable for creating and parsing deadline tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" * @return The input representation of the deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" public String getInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" return \"deadline \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":45}},{"path":"src/main/java/duke/data/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * The Event class represents an event task in the task management application.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" * It extends the parent Task class and includes information about the event\u0027s start and end dates.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * Event tasks are used to schedule events with specific start and end times.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" private final LocalDate start; //the start date of the event","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private final LocalDate end; //the end date of the event","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * Constructs an Event object with the provided task description, event name, start date, and end date.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * @param name The name or title of the event.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @param start The start date of the event.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" * @param end The end date of the event.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" public Event(String taskDescription, String name, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the event task for display purposes.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, start date, and end date.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" super.checkDone(),","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" super.getName(),","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" super.formatDate(start),","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" super.formatDate(end));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * Gets the input representation of the event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * The input format is suitable for creating and parsing event tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" * @return The input representation of the event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" public String getInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" return \"event \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":53}},{"path":"src/main/java/duke/data/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" * The abstract Task class represents a generic task with a task description, name, and completion status.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * Subclasses such as ToDo, Deadline, and Event provide specific task types.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * Constructs a new Task with the provided task description and name.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @param name The name or title of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public Task(String taskDescription, String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" protected String getName() {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" return this.name;","lastModifiedDate":"2023-08-24"},{"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":" public String getTaskDescription() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return this.taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * Gets a formatted input string for the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" * @return The formatted input string representing the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" public abstract String getInput();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * Gets a formatted string for printing the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * @return The formatted string for printing the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" public abstract String getTaskForPrinting();","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" * Gets a formatted string for saving the task, including its completion status.","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" * @return The formatted string for saving the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" public String getTaskForSaving() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" String done \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" done \u003d \"X\";","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" done \u003d \" \";","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" return done + getInput(); //append completion status character to input","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" * Sets the completion status of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * @param isDone True if the task is completed; false otherwise.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" public void setDone(boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" * Checks the completion status of the task and returns \u0027X\u0027 if completed, or \u0027 \u0027 if not completed.","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" * @return \u0027X\u0027 if the task is completed; \u0027 \u0027 if not completed.","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" protected String checkDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" * Formats a given LocalDate object into a string using the \"dd/MM/yyyy\" pattern.","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" * @param date The LocalDate object to be formatted.","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" * @return The formatted date string.","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":93}},{"path":"src/main/java/duke/data/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.data.task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" * The ToDo class represents a to-do task in the task management application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" * It extends the base Task class and includes a description of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" * ToDo tasks are used to represent tasks without specific deadlines or start times.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" * Constructs a ToDo object with the provided task description.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" public ToDo(String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" super(taskDescription, taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the to-do task for display purposes.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][T] %s\", super.checkDone(), super.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" * Gets the input representation of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * The input format is suitable for creating and parsing to-do tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * @return The input representation of the to-do task.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" public String getInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" return \"todo \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":39}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Event;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import duke.data.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * The Parser class is responsible for parsing user input and converting it into commands and task objects.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * It supports the creation of ToDo, Deadline, and Event tasks from user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * This class also handles parsing of task details from data files.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"public class Parser {","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":" * Parses the input command and creates a Command object.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" * This method extracts the action and task description from the input and returns a Command object.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" * @param input The input command provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing, such as an empty input.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" public Command parseInput(String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Empty input detected.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" int space \u003d input.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" String action \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" if (space \u003d\u003d -1) { //input is a single word","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" action \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" //split input into action and description","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" action \u003d input.substring(0, space);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" description \u003d input.substring(space + 1, input.length());","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" return new Command(action, description);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"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":47,"author":{"gitId":"tllshan"},"content":" * This method extracts task details from the input, creates a Command object, and parses the task type.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" * @param fileLine The input line from the data file containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" public Task parseTaskFromFile(String fileLine) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" String input \u003d fileLine.substring(1); //remove completion status character to extract task input","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" Command command \u003d parseInput(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" Task task \u003d parseTask(command.getAction(), command.getTaskDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" //Extract the task completion status character from the file line.","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" //If it is marked as completed (\u0027X\u0027), set the task as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" if (fileLine.charAt(0) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" * Parses a Task object based on its type and input details.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * @param type The type of the task (todo, deadline, event).","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing or task creation.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" public Task parseTask(String type, String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" task \u003d parseToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" task \u003d parseDeadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" task \u003d parseEvent(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid task type.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" }","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":" * Parses the input string to create a new ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" * @return A new ToDo task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" private ToDo parseToDo (String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description and due date of the Deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" * @return A new Deadline task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" private Deadline parseDeadline(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" String dueDate \u003d fields[1].trim();","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || dueDate.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for deadline detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" return new Deadline(taskDescription, name, parseDate(dueDate));","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description, start date, and end date of the Event task.","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":" * @return A new Event task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"tllshan"},"content":" private Event parseEvent(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/from|/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"tllshan"},"content":" String start \u003d fields[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"tllshan"},"content":" String end \u003d fields[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for event detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"tllshan"},"content":" return new Event(taskDescription, name, parseDate(start), parseDate(end));","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"tllshan"},"content":" * Parses a string into a LocalDate object.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"tllshan"},"content":" * @param date The string containing a date to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"tllshan"},"content":" * @return A LocalDate object representing the parsed date.","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"tllshan"},"content":" private static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"tllshan"},"content":" return LocalDate.parse(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"tllshan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"tllshan"},"content":" System.out.println(\"Error parsing date: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":161}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.io.BufferedReader;","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.FileReader;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * The Storage class is responsible for loading and saving tasks from/to a data file for the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * It interacts with the data file to read and write task information, ensuring data persistence.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * Constructs a new Storage object with the specified parser.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @param parser The parser used to interpret and convert data from the data file.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public Storage(Parser parser) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" this.parser \u003d parser;","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":" * Loads tasks from the data file and returns them as an ArrayList of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * If the data file doesn\u0027t exist, a new file is created.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" * @return An ArrayList containing the loaded tasks, or null in case of errors.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(Duke.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" String currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" while (currLine !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" Task task \u003d parser.parseTaskFromFile(currLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while adding tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" System.out.println(\"HERE\");","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * Saves tasks from the provided TaskList to the data file.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" * @param taskList The TaskList containing tasks to be saved.","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" public void saveTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(Duke.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d task.getTaskForSaving() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" writer.append(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":86}},{"path":"src/main/java/duke/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.tasklist;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.util.Iterator;","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 TaskList class represents a collection of tasks managed by the ChatterChicken task manager.","lastModifiedDate":"2023-09-07"},{"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 final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" * Constructs a new TaskList with the provided list of tasks and a UI component for user interactions.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * @param ui The user interface component for displaying messages and user interactions.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Ui ui) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-07"},{"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":" * Adds a new task to the task list based on the provided Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the added task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" return ui.displayAddTask(task, taskList.size());","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * Marks a task as done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the marked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to mark as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"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":50,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" public String markTask(String input) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" return ui.displayMarkTask(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for marking list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" * Unmarks a previously marked task as not done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the unmarked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to unmark.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"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":67,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" public String unmarkTask(String input) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" task.setDone(false);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" return ui.displayUnmarkTask(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"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-27"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" * Deletes a task from the task list based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message after deleting the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"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":84,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" public String deleteTask(String input) throws CCException {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" int index \u003d getIndex(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" return ui.displayDeleteTask(task, taskList.size());","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" public String find(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" if(task.getTaskDescription().contains(input)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" return ui.displayMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" * Retrieves the index of a task based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information and index as the last character.","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" * @return The index of the task parsed from the input.","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" private int getIndex(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" return input.charAt(input.length() - 1) - \u00270\u0027 - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" * Prints the list of tasks with their respective indexes.","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" public String printList() {","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" return ui.displayList(taskList);","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" return taskList.iterator();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":127}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":56}},{"path":"src/main/java/duke/ui/Gui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"public class Gui extends Application {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" private Scene scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"// private Image user \u003d new Image(this.getClass().getResourceAsStream(\"resources/images/DaUser.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"// private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"resources/images/DaDuke.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" stage.show();","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" });","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" });","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":"// sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":"// handleUserInput();","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":"// });","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"//","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":"// userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":"// handleUserInput();","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":"// });","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" return textToAdd;","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":"// private void handleUserInput() {","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":"// Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":"// Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":"// dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":"// new DialogBox(userText, new ImageView(user)),","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":"// new DialogBox(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":"// );","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":"// userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":"// }","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":129}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"public class MainWindow {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" private Duke duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" private static final Image userImage \u003d new Image(DialogBox.class.getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" private static final Image dukeImage \u003d new Image(DialogBox.class.getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" private void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public void setDuke(Duke duke) {","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" );","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"tllshan":49}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" * The Ui class handles user interface interactions for the ChatterChicken task manager application.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" * It provides methods to display messages and task-related information to the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private static final String LINE \u003d \"\\n _____________________________________________________________________________\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" private static final String INDENT \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" private static final String INDENT_BIG \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * Displays a greeting message to the user to introduce ChatterChicken.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public void displayGreeting() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Hello! I\u0027m ChatterChicken!\\n\" + INDENT + \"What can I do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * Displays a farewell message to the user as they exit the ChatterChicken application.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" public String displayFarewell() {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" public String displayAddTask(Task task, int size) {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" public String displayDeleteTask(Task task, int size) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in your list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" public String displayMarkTask(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" return INDENT + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting();","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" public String displayUnmarkTask(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" return INDENT + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting();","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" public String displayMatchingTasks(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" String result \u003d INDENT + \"Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" result +\u003d \"\\n\" + INDENT_BIG + index + \".\" + task.getTaskForPrinting();","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" index++;","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" return result;","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" * @param taskList The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" public String displayList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" String result \u003d INDENT + \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" result +\u003d \"\\n\" + INDENT_BIG + (i + 1) + \".\" + taskList.get(i).getTaskForPrinting();","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" return result;","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" * Prints a message to the screen, surrounded by the predefined line separator.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" private void printToScreen(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + message + LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tllshan":106}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"tllshan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":12,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":13,"author":{"gitId":"tllshan"},"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-16"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"tllshan":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Event;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import duke.data.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" public void parseTask_invalidTaskType_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"invalid\", \"taskDescription\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" fail(\"Task was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyToDoDescription_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"todo\", \"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" fail(\"ToDo was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" public void parseTask_validToDo_returnsToDo() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" task \u003d parser.parseTask(\"todo\", \"read book\");","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" assertTrue(task instanceof ToDo);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" assertEquals(\"todo read book\", task.getInput());","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyDeadlineDescription_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"deadline\", \"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" fail(\"Deadline was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyDeadlineEndDate_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"deadline\", \"return book /by \");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" fail(\"Deadline was successfully constructed with empty end date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" public void parseTask_validDeadline_returnsDeadline() {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" task \u003d parser.parseTask(\"deadline\", \"return book /by 2023-01-09\");","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" assertTrue(task instanceof Deadline);","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" assertEquals(\"deadline return book /by 2023-01-09\", task.getInput());","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyEventDescription_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"event\", \"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" fail(\"Event was successfully constructed with empty description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyEventStartDate_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"event\", \"holiday /from /to 2023-12-25\");","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" fail(\"Event was successfully constructed with empty start date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" public void parseTask_emptyEventEndDate_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" parser.parseTask(\"event\", \"holiday /from 2023-12-02 /to \");","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" fail(\"Event was successfully constructed with empty end date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" public void parseTask_validEvent_returnsEvent() {","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" task \u003d parser.parseTask(\"event\", \"holiday /from 2023-12-02 /to 2023-12-25\");","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"tllshan"},"content":" assertTrue(task instanceof Event);","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"tllshan"},"content":" assertEquals(\"event holiday /from 2023-12-02 /to 2023-12-25\", task.getInput());","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"tllshan":135}},{"path":"src/test/java/duke/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package duke.tasklist;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import duke.data.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import duke.data.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import duke.data.exception.CCException;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" public void deleteTask_invalidIndex_throwsCCException() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e(), new Ui());","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" taskList.deleteTask(\"-1\");","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" fail(\"Invalid index was deleted from task list.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" @Test","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" public void deleteTask_validIndex_taskDeletedFromList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e(), new Ui());","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" ToDo toBeDeleted \u003d new ToDo(\"delete this\");","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" taskList.addTask(new ToDo(\"read book 1\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" taskList.addTask(new ToDo(\"read book 2\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" taskList.addTask(toBeDeleted);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" taskList.addTask(new ToDo(\"read book 3\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" taskList.deleteTask(\"3\");","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" assertFalse(task.equals(toBeDeleted));","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"tllshan":47}},{"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 7e63fc0c..f23e0f95 100644 --- a/tllshan_ip_master/commits.json +++ b/tllshan_ip_master/commits.json @@ -1 +1 @@ -{"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":"","tags":["branch-level-7"],"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":"","tags":["branch-level-8"],"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}}},{"hash":"aa43c1c515213f7ed1dca40a32e6babc8bb7c69d","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}}]},{"date":"2023-09-07","commitResults":[{"hash":"b1926a6d2de148984eb2da023647dc1b1c884a90","isMergeCommit":false,"messageTitle":"Fix bugs in all classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":66}}},{"hash":"4a7750a7fc75f4a75b7e9e1993b7e7463a005d1c","isMergeCommit":false,"messageTitle":"Restructure packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":22}}},{"hash":"d3552dcf7fc1799256e5827f0d475a22837dfcd0","isMergeCommit":false,"messageTitle":"Implement A-JUnit for parser and tasklist","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":9}}},{"hash":"5fb4074f610b9a3f81ccae4bf889a23c4904aee5","isMergeCommit":false,"messageTitle":"Add A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":20}}},{"hash":"b5c66ba8687d69e0657ea88928db24bfa1d6ddd7","isMergeCommit":false,"messageTitle":"Add A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":57}}},{"hash":"7ddc0021544d47c09bdd1045e943392b137a8492","isMergeCommit":false,"messageTitle":"Implement Level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"cb7ac81ebea19cf443cd713a3456ce7bc83f6396","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tllshan/branch-A-CodingStandard","messageBody":"Add A-CodingStandard","fileTypesAndContributionMap":{}},{"hash":"775babe21f483798a761e6712f6bbbd72b7abc0e","isMergeCommit":true,"messageTitle":"Merge pull request #5 from tllshan/branch-A-JavaDoc","messageBody":"Add A-JavaDoc","fileTypesAndContributionMap":{}},{"hash":"67a316f1c871f472a3e1cfd1c0b2a146993b0ae6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"127328307f5a9c55c287620e51e6f21659158fac","isMergeCommit":true,"messageTitle":"Merge pull request #6 from tllshan/branch-Level-9","messageBody":"Implement Level 9","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"89f3a1b922eb4c26874fe1137ddbdd8fbdde2712","isMergeCommit":false,"messageTitle":"Import javafx","messageBody":"","tags":["level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":1},"java":{"insertions":80,"deletions":55}}},{"hash":"894830a31f6a005127d7aaae68c9032279c1f047","isMergeCommit":false,"messageTitle":"Create gui class","messageBody":"","tags":["branch-level-10"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":10}}},{"hash":"9aeb11304bd752191705ee5c05a6d68edc1a43ef","isMergeCommit":false,"messageTitle":"Implement main and mainwindow classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":310,"deletions":44}}}]},{"date":"2023-09-16","commitResults":[{"hash":"afa66fda63e5a2c644c639bf7e4f8d1407c39f8f","isMergeCommit":false,"messageTitle":"Add FXML","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":75,"deletions":133}}},{"hash":"2389f4cbb020f5e18dc5dabfc67250ab89d6046d","isMergeCommit":false,"messageTitle":"Add FXML","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":8}}},{"hash":"ee626cf3c6af0cdf120f38d868c0e3e8872f9597","isMergeCommit":true,"messageTitle":"Merge pull request #8 from tllshan/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tllshan":{"java":1340,"md":0,"fxml":35,"sh":0,"bat":7,"gradle":21,"txt":14}},"authorContributionVariance":{"tllshan":356066.28},"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":"","tags":["branch-level-7"],"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":"","tags":["branch-level-8"],"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}}},{"hash":"aa43c1c515213f7ed1dca40a32e6babc8bb7c69d","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}}]},{"date":"2023-09-07","commitResults":[{"hash":"b1926a6d2de148984eb2da023647dc1b1c884a90","isMergeCommit":false,"messageTitle":"Fix bugs in all classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":66}}},{"hash":"4a7750a7fc75f4a75b7e9e1993b7e7463a005d1c","isMergeCommit":false,"messageTitle":"Restructure packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":22}}},{"hash":"d3552dcf7fc1799256e5827f0d475a22837dfcd0","isMergeCommit":false,"messageTitle":"Implement A-JUnit for parser and tasklist","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":9}}},{"hash":"5fb4074f610b9a3f81ccae4bf889a23c4904aee5","isMergeCommit":false,"messageTitle":"Add A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":20}}},{"hash":"b5c66ba8687d69e0657ea88928db24bfa1d6ddd7","isMergeCommit":false,"messageTitle":"Add A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":57}}},{"hash":"7ddc0021544d47c09bdd1045e943392b137a8492","isMergeCommit":false,"messageTitle":"Implement Level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"cb7ac81ebea19cf443cd713a3456ce7bc83f6396","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tllshan/branch-A-CodingStandard","messageBody":"Add A-CodingStandard","fileTypesAndContributionMap":{}},{"hash":"775babe21f483798a761e6712f6bbbd72b7abc0e","isMergeCommit":true,"messageTitle":"Merge pull request #5 from tllshan/branch-A-JavaDoc","messageBody":"Add A-JavaDoc","fileTypesAndContributionMap":{}},{"hash":"67a316f1c871f472a3e1cfd1c0b2a146993b0ae6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"127328307f5a9c55c287620e51e6f21659158fac","isMergeCommit":true,"messageTitle":"Merge pull request #6 from tllshan/branch-Level-9","messageBody":"Implement Level 9","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"89f3a1b922eb4c26874fe1137ddbdd8fbdde2712","isMergeCommit":false,"messageTitle":"Import javafx","messageBody":"","tags":["level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":1},"java":{"insertions":80,"deletions":55}}},{"hash":"894830a31f6a005127d7aaae68c9032279c1f047","isMergeCommit":false,"messageTitle":"Create gui class","messageBody":"","tags":["branch-level-10"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":10}}},{"hash":"9aeb11304bd752191705ee5c05a6d68edc1a43ef","isMergeCommit":false,"messageTitle":"Implement main and mainwindow classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":310,"deletions":44}}}]},{"date":"2023-09-16","commitResults":[{"hash":"afa66fda63e5a2c644c639bf7e4f8d1407c39f8f","isMergeCommit":false,"messageTitle":"Add FXML","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":75,"deletions":133}}},{"hash":"2389f4cbb020f5e18dc5dabfc67250ab89d6046d","isMergeCommit":false,"messageTitle":"Add FXML","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":8}}},{"hash":"ee626cf3c6af0cdf120f38d868c0e3e8872f9597","isMergeCommit":true,"messageTitle":"Merge pull request #8 from tllshan/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"aac4cd07493f48755003118f52797f72eeb101b7","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":34,"deletions":24}}},{"hash":"4da63840c9f10ea92ed30a5725b580b3c5de21bb","isMergeCommit":false,"messageTitle":"Generate new JAR","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"tllshan":{"java":1340,"md":29,"fxml":35,"sh":0,"bat":7,"gradle":21,"txt":11}},"authorContributionVariance":{"tllshan":334854.75},"authorDisplayNameMap":{"tllshan":"CS2103T-F11-2 TSOU..NNON"}} diff --git a/victorlaiyeeteng_ip_master/authorship.json b/victorlaiyeeteng_ip_master/authorship.json index fdcfacbf..7053d0f5 100644 --- a/victorlaiyeeteng_ip_master/authorship.json +++ b/victorlaiyeeteng_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"# duke.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":"victorlaiyeeteng"},"content":"3. After that, locate the `src/main/java/duke.duke.Duke.java` file, right-click it, and choose `Run duke.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":{"victorlaiyeeteng":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":"victorlaiyeeteng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"mainClassName \u003d \u0027duke.controller.Launcher\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" mainClass.set(\"duke.controller.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":"javafx {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027 ]","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" archiveFileName \u003d \"dukeGUI.jar\"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" archiveBaseName \u003d \"dukeGUI\"","lastModifiedDate":"2023-09-10"},{"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":"victorlaiyeeteng"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"victorlaiyeeteng":31,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"D | 0 | submission | 2002-10-15","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"victorlaiyeeteng":2}},{"path":"src/main/java/duke/controller/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"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":"victorlaiyeeteng"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"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":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":61}},{"path":"src/main/java/duke/controller/DialogContainer.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the dialog container containing all the messages.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DialogContainer extends VBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the dialog container.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param scrollPane The scrollPane that this container is within.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" public DialogContainer(ScrollPane scrollPane) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" this.setPrefHeight(Region.USE_COMPUTED_SIZE - 60.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" this.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":21}},{"path":"src/main/java/duke/controller/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.duke.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the JavaFX Application Launcher.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":17}},{"path":"src/main/java/duke/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the main window of the application.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" private final Image userImage \u003d new Image(","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" this.getClass().getResourceAsStream(\"/images/spiderman.jpeg\")","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" private final Image dukeImage \u003d new Image(","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" this.getClass().getResourceAsStream(\"/images/captamerica.jpeg\")","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" * Initializes the main window.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" * Sets the Duke instance for this main window.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param d The duke instance.","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"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":59,"author":{"gitId":"victorlaiyeeteng"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" String response \u003d duke.processInputAndGetResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" * Displays the welcome message in the main window.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" String message \u003d duke.ui.showWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" assert message.equals(\"Hello! I\u0027m Victor\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"What can I do for you?\\n----------\\n\") : \"Welcome message is wrong\";","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getDukeDialog(message, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" * Loads tasks from text file.","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" List\u003cTask\u003e list \u003d duke.getTaskList().getList();","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" assert list.equals(new ArrayList\u003cTask\u003e(100))","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" : \"List of tasks should be empty\";","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" duke.storage.loadTasksFromFile(list);","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getDukeDialog(e.getMessage(), dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":101}},{"path":"src/main/java/duke/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" * The main class that executes the Duke bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Duke {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" public final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the Duke bot instance.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" storage \u003d new Storage(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" taskList \u003d new TaskList(100);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the response of the duke bot generated based on user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param input User\u0027s input","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Duke\u0027s response.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" public String processInputAndGetResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" String command \u003d parser.getCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" String inputDetails \u003d parser.getInputDetails();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" return processList();","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" return processMark(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" return processUnMark(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" return processTodo(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" return processDeadline(parser);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"event\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" return processEvent(parser);","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" return processDelete(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"find\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" return processFind(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"reschedule\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" return processReschedule(parser);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" return (ui.showMessage(e.getMessage()));","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" * Processes the list command.","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processList() {","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.showList();","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the mark command.","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after mark command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processMark(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The task number to mark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" return task.setDone();","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the unmark command.","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after unmark command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processUnMark(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"victorlaiyeeteng"},"content":" return task.unsetDone();","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the todo command.","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after todo command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processTodo(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo task cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Todo(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.addTask(task);","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the deadline command.","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after deadline command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processDeadline(Parser parser) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The info of a deadline task cannot be empty.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] deadlineInfo \u003d parser.parseInputDetailsDeadline();","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"victorlaiyeeteng"},"content":" String description \u003d deadlineInfo[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"victorlaiyeeteng"},"content":" String deadline \u003d deadlineInfo[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.addTask(task);","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the event command.","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after event command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processEvent(Parser parser) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":161,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The info of a event task cannot be empty.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":162,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":163,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] eventInfo \u003d parser.parseInputDetailsEvent();","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"victorlaiyeeteng"},"content":" String description \u003d eventInfo[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"victorlaiyeeteng"},"content":" String from \u003d eventInfo[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"victorlaiyeeteng"},"content":" String to \u003d eventInfo[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-22"},{"lineNumber":168,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.addTask(task);","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the delete command.","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after delete command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processDelete(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.deleteTaskFromFile(taskNumber);","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.removeTask(taskNumber);","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the find command.","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after find command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processFind(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The keyword to find cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.findTasks(inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":200,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":202,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":203,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the reschedule command.","lastModifiedDate":"2023-09-13"},{"lineNumber":204,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":205,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after reschedule command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":206,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":207,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":208,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processReschedule(Parser parser) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":209,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The info of task to reschedule cannot be empty.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] rescheduleInfo \u003d parser.parseRescheduleInfo();","lastModifiedDate":"2023-09-11"},{"lineNumber":213,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(rescheduleInfo[0]);","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"victorlaiyeeteng"},"content":" String rescheduleDetails \u003d rescheduleInfo[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":215,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-11"},{"lineNumber":216,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.deleteTaskFromFile(taskNumber);","lastModifiedDate":"2023-09-11"},{"lineNumber":217,"author":{"gitId":"victorlaiyeeteng"},"content":" return (task.reschedule(rescheduleDetails, storage));","lastModifiedDate":"2023-09-11"},{"lineNumber":218,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":219,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":220,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":220}},{"path":"src/main/java/duke/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.controller.DialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" * Starts the Duke bot application.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" * primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.\u003cduke.controller.MainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.\u003cduke.controller.MainWindow\u003egetController().showWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.\u003cduke.controller.MainWindow\u003egetController().loadTasksFromFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":44}},{"path":"src/main/java/duke/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the Ui that deals with the interactions with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Displays the standard welcome message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" return (\"Hello! I\u0027m Victor\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"What can I do for you?\\n----------\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" * Displays the message given by the input.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param message Message displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" public String showMessage(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" return (message);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":24}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents a DukeException","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor for a duke.exception.DukeException","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param message The exception message","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":16}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor for the deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param by duke.task.Deadline of the task","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * Update the deadline time.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param by New deadline time.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public void updateByTime(String by) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" public String reschedule(String rescheduleDetails, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] newByTime \u003d rescheduleDetails.split(\"/by \");","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" if (newByTime.length !\u003d 2) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Valid Input Syntax: reschedule {taskNumber} /by {newTime}\");","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" updateByTime(newByTime[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, newByTime[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"Rescheduled Task: \" + this;","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (by !\u003d null) : \"By time of deadline task cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" String byFormatted \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormatted + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":51}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor for event task.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the event","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param from Start time of the event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param to End time of the event","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" if (this.from.isAfter(this.to)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Start date cannot be after end date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" public void updateTime(String from, String to) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" public String reschedule(String rescheduleDetails, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] newTime \u003d rescheduleDetails.split(\"/from | /to \");","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" if (newTime.length !\u003d 3) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Valid Input Syntax: reschedule {taskNumber} /from {newTime} /to {newTime}\");","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" updateTime(newTime[1], newTime[2]);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, newTime[1], newTime[2]);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"Rescheduled Task: \" + this;","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (from !\u003d null) : \"From time of event task cannot be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" String fromFormatted \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (to !\u003d null) : \"To time of event task cannot be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" String toFormatted \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormatted + \" to: \" + toFormatted + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":64}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The status icon.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" * Marks the task to be done.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response of task being marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" public String setDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"----------\\n\", this);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" * Marks the task to be undone.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response of task being marked undone.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" public String unsetDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"----------\\n\", this);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" * Checks if inputted keyword is found in task description.","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param keyword Keyword to find in description.","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return True if found.","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" public boolean match(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (description !\u003d null) : \"Task description cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" * Reschedules a task.","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param rescheduleDetails New timings for task to be rescheduled to.","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response of task being rescheduled.","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When wrong task type to reschedule.","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" public String reschedule(String rescheduleDetails, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"You cannot reschedule this task.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (description !\u003d null) : \"Task description cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":76}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" private List\u003cTask\u003e list;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" private Integer capacity;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs an empty list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param capacity Maximum tasks allowed in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" public TaskList(Integer capacity) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" this.list \u003d new ArrayList\u003c\u003e(capacity);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" this.capacity \u003d capacity;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" public List\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.list;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Checks if list of tasks is empty.","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return True if list is empty.","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" return (list.size() \u003d\u003d 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" * Prints the list of tasks nicely.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" public String showList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" int i;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" String listDisplay \u003d \"Here are your tasks: \\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" for (i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" listDisplay +\u003d String.format(\"%d.%s\\n\", i + 1, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" return listDisplay;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the specific task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Task number is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" public Task getTask(Integer taskNumber) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean taskExceedListSize \u003d taskNumber \u003e list.size();","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean taskSmallerThanOne \u003d taskNumber \u003c 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidTaskNumber \u003d taskExceedListSize || taskSmallerThanOne;","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidTaskNumber) {","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Invalid task number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" return list.get(taskNumber - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" * Removes the specific task.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Task number is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" public String removeTask(Integer taskNumber) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean taskExceedListSize \u003d taskNumber \u003e list.size();","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean taskSmallerThanOne \u003d taskNumber \u003c 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidTaskNumber \u003d taskExceedListSize || taskSmallerThanOne;","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidTaskNumber) {","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Invalid task number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d list.remove(taskNumber - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" task, list.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" * Adds a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" task, list.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"victorlaiyeeteng"},"content":" * Finds tasks based on keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param keyword Keyword to search for in tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"victorlaiyeeteng"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"victorlaiyeeteng"},"content":" TaskList tasks \u003d new TaskList(this.capacity);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"victorlaiyeeteng"},"content":" for (Task task: list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"victorlaiyeeteng"},"content":" if (task.match(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"victorlaiyeeteng"},"content":" tasks.list.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"victorlaiyeeteng"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"victorlaiyeeteng"},"content":" return (\"There are no matching tasks in your list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"victorlaiyeeteng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Here are the matching tasks in your list: \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"victorlaiyeeteng"},"content":" + tasks.showList());","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":130}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":22}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the parser that handles user commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" private String command;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" private String inputDetails;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the parser.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param input User command.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public Parser(String input) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] parsedInput \u003d this.parseCommand(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" this.command \u003d parsedInput[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parsedInput.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" this.inputDetails \u003d parsedInput[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses the command into type of command and input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param input User\u0027s command.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Array of type of command and input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" return input.split(\" \", 2);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Get user\u0027s command.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return User\u0027s command.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (command !\u003d null) : \"Command cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" * Get input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" public String getInputDetails() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.inputDetails;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses deadline task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Deadline task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Missing description or deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseInputDetailsDeadline() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (inputDetails !\u003d null) : \"Input details cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] deadlineInfo \u003d inputDetails.split(\" /by \");","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidDeadlineInfo \u003d deadlineInfo.length \u003c 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidDeadlineInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" \"☹ OOPS!!! Missing description or deadline of deadline task. \"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"Valid Input Syntax: deadline desc /by date\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" return deadlineInfo;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses event task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Event task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Missing description or start or end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseInputDetailsEvent() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (inputDetails !\u003d null) : \"Input details cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] eventInfo \u003d inputDetails.split(\" /from | /to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidEventInfo \u003d eventInfo.length \u003c 3;","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidEventInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" \"☹ OOPS!!! Missing description, start time or end time of deadline task. \"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" +","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Valid Input Syntax: event desc /from date /to date\"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" return eventInfo;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseRescheduleInfo() throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (inputDetails !\u003d null) : \"Input details cannot be null.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] rescheduleInfo \u003d inputDetails.split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidRescheduleInfo \u003d rescheduleInfo.length \u003c 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidRescheduleInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! Missing task, or new time details of rescheduling task.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" return rescheduleInfo;","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" * Checks if input details are present.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return True if input details are present.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":" public boolean checkInputDetailsAbsent() {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" return inputDetails \u003d\u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":105}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the storage file management system of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" private final String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param filePath File path of the storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves task(to-do) into file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTask(String description) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" String taskToSave \u003d String.format(\"T | 0 | %s\", description);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" this.saveTaskToFile(taskToSave);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves task(deadline) into file.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param deadline Deadline of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTask(String description, String deadline) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" String taskToSave \u003d String.format(\"D | 0 | %s | %s\", description, deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" this.saveTaskToFile(taskToSave);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves task(event) into file.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param from Start date of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param to End date of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTask(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" String taskToSave \u003d String.format(\"E | 0 | %s | %s | %s\", description, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" this.saveTaskToFile(taskToSave);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves the task straight to the file (lower-level)","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param task String of task to save.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTaskToFile(String task) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" checkDataFile();","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath, true))) {","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.newLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.write(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" * Deletes task from file.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskNumber Index of task to delete.","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error modifying file.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" public void deleteTaskFromFile(Integer taskNumber) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" String currentLine;","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" Integer lineNumber \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" // Copies tasks that are not to be deleted out to temporary list.","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" if (!lineNumber.equals(taskNumber)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":" lines.add(currentLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"victorlaiyeeteng"},"content":" lineNumber++;","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"victorlaiyeeteng"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath));","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"victorlaiyeeteng"},"content":" // Writes tasks from temporary list into txt file.","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"victorlaiyeeteng"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.write(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"victorlaiyeeteng"},"content":" * Load tasks from file into list.","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"victorlaiyeeteng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param list List for file to populate.","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error reading from file.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"victorlaiyeeteng"},"content":" public void loadTasksFromFile(List\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"victorlaiyeeteng"},"content":" checkDataFile();","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"victorlaiyeeteng"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"victorlaiyeeteng"},"content":" String line;","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"victorlaiyeeteng"},"content":" while ((line \u003d fileReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"victorlaiyeeteng"},"content":" processTaskIntoList(line, list);","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"victorlaiyeeteng"},"content":" fileReader.close();","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"victorlaiyeeteng"},"content":" * Processes each task in data txt file format into application\u0027s TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskLine Task in data txt file.","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param list Application\u0027s TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error instantiating Task object.","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":153,"author":{"gitId":"victorlaiyeeteng"},"content":" public void processTaskIntoList(String taskLine, List\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":154,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] formattedLine \u003d taskLine.split(\" \\\\| \");","lastModifiedDate":"2023-09-11"},{"lineNumber":155,"author":{"gitId":"victorlaiyeeteng"},"content":" switch (formattedLine[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"T\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Todo(formattedLine[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"victorlaiyeeteng"},"content":" if (formattedLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"victorlaiyeeteng"},"content":" task.setDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"victorlaiyeeteng"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"D\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Deadline(formattedLine[2], formattedLine[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"victorlaiyeeteng"},"content":" if (formattedLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"victorlaiyeeteng"},"content":" task.setDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"victorlaiyeeteng"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"E\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Event(formattedLine[2], formattedLine[3], formattedLine[4]);","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"victorlaiyeeteng"},"content":" if (formattedLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"victorlaiyeeteng"},"content":" task.setDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"victorlaiyeeteng"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"victorlaiyeeteng"},"content":" default: break;","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"victorlaiyeeteng"},"content":" public void checkDataFile() throws Exception {","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"victorlaiyeeteng"},"content":" String fileName \u003d filePath;","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"victorlaiyeeteng"},"content":" Path filePath \u003d Paths.get(fileName);","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"victorlaiyeeteng"},"content":" if (!Files.exists(filePath.getParent())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"victorlaiyeeteng"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":191,"author":{"gitId":"victorlaiyeeteng"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"victorlaiyeeteng"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":194,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":195}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cInsets top\u003d\"8.0\" right\u003d\"8.0\" bottom\u003d\"8.0\" left\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"100.0\" fitWidth\u003d\"100.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cCircle radius\u003d\"50.0\" centerX\u003d\"50.0\" centerY\u003d\"50.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"8.0\" right\u003d\"8.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003cAnchorPane","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" fx:controller\u003d\"duke.controller.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":27}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testDeadlineStringConversion() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Lab submission (by: Aug 31 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Lab submission\", \"2023-08-31\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Final Project (by: Nov 25 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Final Project\", \"2023-11-25\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Wedding Planning (by: Mar 5 2028)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Wedding Planning\", \"2028-03-05\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testConstructor_invalidDateFormat_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" String description \u003d \"Return book\";","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" String byDate \u003d \"2023 10 12\";","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Return book (by: Oct 12 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(description, byDate).toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" String.format(\"Text \u0027%s\u0027 could not be parsed at index 4\", byDate),","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" e.getMessage()","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"victorlaiyeeteng":43}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testEventStringConversion() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Malaysia Trip (from: Aug 12 2023 to: Aug 13 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Malaysia Trip\", \"2023-08-12\", \"2023-08-13\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Camp (from: Sept 11 2023 to: Sept 14 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Camp\", \"2023-09-11\", \"2023-09-14\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Birthday Party (from: Oct 15 2023 to: Oct 16 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Birthday Party\", \"2023-10-15\", \"2023-10-16\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testConstructor_invalidDates_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Graduation Trip (from: May 10 2024 to: May 9 2024)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Graduation Trip\", \"2024-05-10\", \"2024-05-09\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(\"Start date cannot be after end date\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"victorlaiyeeteng":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"victorlaiyeeteng":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":"victorlaiyeeteng"},"content":"java -classpath ..\\bin duke.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":{"victorlaiyeeteng":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"# duke.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":"victorlaiyeeteng"},"content":"3. After that, locate the `src/main/java/duke.duke.Duke.java` file, right-click it, and choose `Run duke.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":{"victorlaiyeeteng":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":"victorlaiyeeteng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"mainClassName \u003d \u0027duke.controller.Launcher\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" mainClass.set(\"duke.controller.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":"javafx {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027 ]","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" archiveFileName \u003d \"dukeGUI.jar\"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" archiveBaseName \u003d \"dukeGUI\"","lastModifiedDate":"2023-09-10"},{"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":"victorlaiyeeteng"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"victorlaiyeeteng":31,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"E | 0 | GIC Hackathon | 2023-09-15 | 2023-09-17","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"T | 0 | Binary Search LeetCode","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"D | 0 | Final Project Submission | 2023-09-29","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"victorlaiyeeteng":3}},{"path":"data/test.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"D | 0 | Project Final Grading | 2023-10-10","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"D | 0 | Wedding | 2028-10-22","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"E | 0 | Stay-cation | 2023-10-15 | 2023-10-16","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"E | 0 | Hackathon | 2023-12-22 | 2023-12-24","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"D | 0 | Project Final Grading | 2023-10-10","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"D | 0 | Wedding | 2028-10-22","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"E | 0 | Stay-cation | 2023-10-15 | 2023-10-16","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"E | 0 | Hackathon | 2023-12-22 | 2023-12-24","lastModifiedDate":"2023-09-18"}],"authorContributionMap":{"victorlaiyeeteng":9}},{"path":"src/main/java/duke/controller/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"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":"victorlaiyeeteng"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" private DialogBox(String text, Image img, double fitWidth, double fitHeight) {","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" displayPicture.setFitHeight(fitHeight);","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" displayPicture.setFitWidth(fitWidth);","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" dialog.setMinHeight(Label.USE_PREF_SIZE);","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" dialog.setPrefHeight(Label.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets Dialog Box of User.","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param text User\u0027s Text.","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param img User\u0027s Image.","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return User\u0027s dialog box.","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" return new DialogBox(text, img, 50, 50);","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets Dialog Box of Duke.","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param text Duke\u0027s Text.","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param img Duke\u0027s Image.","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Duke\u0027s dialog box.","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" var db \u003d new DialogBox(text, img, 100, 100);","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":78}},{"path":"src/main/java/duke/controller/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.duke.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the JavaFX Application Launcher.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" * A launcher class to launch the Duke application.","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":17}},{"path":"src/main/java/duke/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.List;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the main window of the application.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" private final Image userImage \u003d new Image(","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" this.getClass().getResourceAsStream(\"/images/spiderman.jpeg\")","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" private final Image dukeImage \u003d new Image(","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" this.getClass().getResourceAsStream(\"/images/captamerica.jpeg\")","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" * Initializes the main window.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" * Sets the Duke instance for this main window.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param d The duke instance.","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"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":59,"author":{"gitId":"victorlaiyeeteng"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" String response \u003d duke.processInputAndGetResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" * Displays the welcome message in the main window.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" String message \u003d duke.ui.showWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" assert message.equals(\"Hello! I\u0027m Victor\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"What can I do for you?\\n----------\\n\") : \"Welcome message is wrong\";","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getDukeDialog(message, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" * Loads tasks from text file.","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" List\u003cTask\u003e list \u003d duke.getTaskList().getList();","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" assert list.equals(new ArrayList\u003cTask\u003e(100))","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" : \"List of tasks should be empty\";","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" duke.storage.loadTasksFromFile(list);","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" DialogBox.getDukeDialog(e.getMessage(), dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":101}},{"path":"src/main/java/duke/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" * The main class that executes the Duke bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Duke {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" public final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the Duke bot instance.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" storage \u003d new Storage(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" taskList \u003d new TaskList(100);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the response of the duke bot generated based on user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param input User\u0027s input","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Duke\u0027s response.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" public String processInputAndGetResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" String command \u003d parser.getCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" String inputDetails \u003d parser.getInputDetails();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" return processList();","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" return processMark(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" return processUnMark(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" return processTodo(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" return processDeadline(parser);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"event\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" return processEvent(parser);","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" return processDelete(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"find\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" return processFind(parser, inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"reschedule\": {","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" return processReschedule(parser);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" return (ui.showMessage(e.getMessage()));","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" * Processes the list command.","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processList() {","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.showList();","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the mark command.","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after mark command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processMark(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The task number to mark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" return task.setDone();","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the unmark command.","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after unmark command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processUnMark(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"victorlaiyeeteng"},"content":" return task.unsetDone();","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the todo command.","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after todo command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processTodo(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo task cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Todo(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.addTask(task);","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the deadline command.","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after deadline command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processDeadline(Parser parser) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The info of a deadline task cannot be empty.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] deadlineInfo \u003d parser.parseInputDetailsDeadline();","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"victorlaiyeeteng"},"content":" String description \u003d deadlineInfo[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"victorlaiyeeteng"},"content":" String deadline \u003d deadlineInfo[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.addTask(task);","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the event command.","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after event command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processEvent(Parser parser) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":161,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The info of a event task cannot be empty.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":162,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":163,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] eventInfo \u003d parser.parseInputDetailsEvent();","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"victorlaiyeeteng"},"content":" String description \u003d eventInfo[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"victorlaiyeeteng"},"content":" String from \u003d eventInfo[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"victorlaiyeeteng"},"content":" String to \u003d eventInfo[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-22"},{"lineNumber":168,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.addTask(task);","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the delete command.","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after delete command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processDelete(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(inputDetails);","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.deleteTaskFromFile(taskNumber);","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.removeTask(taskNumber);","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the find command.","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param inputDetails Details of the command instruction.","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after find command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processFind(Parser parser, String inputDetails) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"The keyword to find cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"victorlaiyeeteng"},"content":" return taskList.findTasks(inputDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":200,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":202,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":203,"author":{"gitId":"victorlaiyeeteng"},"content":" * Process the reschedule command.","lastModifiedDate":"2023-09-13"},{"lineNumber":204,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param parser Parser object that parses the whole command.","lastModifiedDate":"2023-09-13"},{"lineNumber":205,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response after reschedule command executed.","lastModifiedDate":"2023-09-13"},{"lineNumber":206,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When there is an invalid command input.","lastModifiedDate":"2023-09-13"},{"lineNumber":207,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":208,"author":{"gitId":"victorlaiyeeteng"},"content":" private String processReschedule(Parser parser) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":209,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parser.checkInputDetailsAbsent()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! The info of task to reschedule cannot be empty.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] rescheduleInfo \u003d parser.parseRescheduleInfo();","lastModifiedDate":"2023-09-11"},{"lineNumber":213,"author":{"gitId":"victorlaiyeeteng"},"content":" int taskNumber \u003d Integer.parseInt(rescheduleInfo[0]);","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"victorlaiyeeteng"},"content":" String rescheduleDetails \u003d rescheduleInfo[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":215,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-11"},{"lineNumber":216,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.deleteTaskFromFile(taskNumber);","lastModifiedDate":"2023-09-11"},{"lineNumber":217,"author":{"gitId":"victorlaiyeeteng"},"content":" return (task.reschedule(rescheduleDetails, storage));","lastModifiedDate":"2023-09-11"},{"lineNumber":218,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":219,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":220,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":220}},{"path":"src/main/java/duke/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" * Starts the Duke bot application.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" * primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" stage.setTitle(\"Victor Task Manager Bot\");","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.\u003cduke.controller.MainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.\u003cduke.controller.MainWindow\u003egetController().showWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" fxmlLoader.\u003cduke.controller.MainWindow\u003egetController().loadTasksFromFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":42}},{"path":"src/main/java/duke/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the Ui that deals with the interactions with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Displays the standard welcome message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" return (\"Hello! I\u0027m Victor\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"What can I do for you?\\n----------\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" * Displays the message given by the input.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param message Message displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" public String showMessage(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" return (message);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":24}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents a DukeException","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor for a duke.exception.DukeException","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param message The exception message","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":16}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor for the deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param by duke.task.Deadline of the task","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" * Update the deadline time.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param by New deadline time.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" public void updateByTime(String by) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" public String reschedule(String rescheduleDetails, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] newByTime \u003d rescheduleDetails.split(\"/by \");","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" if (newByTime.length !\u003d 2) {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Valid Input Syntax: reschedule {taskNumber} /by {newTime}\");","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" updateByTime(newByTime[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, newByTime[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"Rescheduled Task: \" + this;","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (by !\u003d null) : \"By time of deadline task cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" String byFormatted \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormatted + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":52}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor for event task.","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param from Start time of the event","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param to End time of the event","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" if (this.from.isAfter(this.to)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Start date cannot be after end date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" * Updates the from and to time of Event.","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param from New from time.","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param to New to time.","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" public void updateTime(String from, String to) {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" public String reschedule(String rescheduleDetails, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] newTime \u003d rescheduleDetails.split(\"/from | /to \");","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" if (newTime.length !\u003d 3) {","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Valid Input Syntax: reschedule {taskNumber} /from {newTime} /to {newTime}\");","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" updateTime(newTime[1], newTime[2]);","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" storage.saveTask(description, newTime[1], newTime[2]);","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"Rescheduled Task: \" + this;","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (from !\u003d null) : \"From time of event task cannot be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" String fromFormatted \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (to !\u003d null) : \"To time of event task cannot be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" String toFormatted \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormatted + \" to: \" + toFormatted + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":70}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The status icon.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" * Marks the task to be done.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response of task being marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" public String setDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"----------\\n\", this);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" * Marks the task to be undone.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response of task being marked undone.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" public String unsetDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"----------\\n\", this);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" * Checks if inputted keyword is found in task description.","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param keyword Keyword to find in description.","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return True if found.","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" public boolean match(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (description !\u003d null) : \"Task description cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" * Reschedules a task.","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param rescheduleDetails New timings for task to be rescheduled to.","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Response of task being rescheduled.","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException When wrong task type to reschedule.","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" public String reschedule(String rescheduleDetails, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"You cannot reschedule this task.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (description !\u003d null) : \"Task description cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":76}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" private List\u003cTask\u003e list;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" private Integer capacity;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs an empty list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param capacity Maximum tasks allowed in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" public TaskList(Integer capacity) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" this.list \u003d new ArrayList\u003c\u003e(capacity);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" this.capacity \u003d capacity;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" public List\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.list;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Checks if list of tasks is empty.","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return True if list is empty.","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" return (list.size() \u003d\u003d 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" * Prints the list of tasks nicely.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" public String showList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" int i;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" String listDisplay \u003d \"Here are your tasks: \\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" for (i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" listDisplay +\u003d String.format(\"%d.%s\\n\", i + 1, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" return listDisplay;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" * Gets the specific task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return The task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Task number is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" public Task getTask(Integer taskNumber) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean isOutsideListSize \u003d taskNumber \u003e list.size();","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean isTaskSmallerThanOne \u003d taskNumber \u003c 1;","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean isInvalidTaskNumber \u003d isOutsideListSize || isTaskSmallerThanOne;","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" if (isInvalidTaskNumber) {","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Invalid task number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" return list.get(taskNumber - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" * Removes the specific task.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskNumber The index of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Task number is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" public String removeTask(Integer taskNumber) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean isOutsideListSize \u003d taskNumber \u003e list.size();","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean isTaskSmallerThanOne \u003d taskNumber \u003c 1;","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean isInvalidTaskNumber \u003d isOutsideListSize || isTaskSmallerThanOne;","lastModifiedDate":"2023-09-18"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" if (isInvalidTaskNumber) {","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"Invalid task number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d list.remove(taskNumber - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" task, list.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" * Adds a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"%s\\n\" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" task, list.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"victorlaiyeeteng"},"content":" * Finds tasks based on keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param keyword Keyword to search for in tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"victorlaiyeeteng"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (list !\u003d null) : \"List of tasks must be instantiated.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"victorlaiyeeteng"},"content":" TaskList tasks \u003d new TaskList(this.capacity);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"victorlaiyeeteng"},"content":" for (Task task: list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"victorlaiyeeteng"},"content":" if (task.match(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"victorlaiyeeteng"},"content":" tasks.list.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"victorlaiyeeteng"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"victorlaiyeeteng"},"content":" return (\"There are no matching tasks in your list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"victorlaiyeeteng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"victorlaiyeeteng"},"content":" return String.format(\"Here are the matching tasks in your list: \\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"victorlaiyeeteng"},"content":" + tasks.showList());","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":130}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructor of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"victorlaiyeeteng":20}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the parser that handles user commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" private String command;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" private String inputDetails;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the parser.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param input User command.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" public Parser(String input) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] parsedInput \u003d this.parseCommand(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" this.command \u003d parsedInput[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" if (parsedInput.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" this.inputDetails \u003d parsedInput[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses the command into type of command and input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param input User\u0027s command.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Array of type of command and input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" return input.split(\" \", 2);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Get user\u0027s command.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return User\u0027s command.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (command !\u003d null) : \"Command cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" * Get input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Input details.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" public String getInputDetails() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" return this.inputDetails;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses deadline task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Deadline task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Missing description or deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseInputDetailsDeadline() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (inputDetails !\u003d null) : \"Input details cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] deadlineInfo \u003d inputDetails.split(\" /by \");","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidDeadlineInfo \u003d deadlineInfo.length \u003c 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidDeadlineInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" \"☹ OOPS!!! Missing description or deadline of deadline task. \"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" + \"Valid Input Syntax: deadline desc /by date\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" return deadlineInfo;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses event task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Event task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Missing description or start or end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseInputDetailsEvent() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (inputDetails !\u003d null) : \"Input details cannot be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] eventInfo \u003d inputDetails.split(\" /from | /to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidEventInfo \u003d eventInfo.length \u003c 3;","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidEventInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" \"☹ OOPS!!! Missing description, start time or end time of deadline task. \"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" +","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Valid Input Syntax: event desc /from date /to date\"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" return eventInfo;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" * Parses reschedule information.","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return Reschedule information.","lastModifiedDate":"2023-09-18"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Missing task or new time details of task.","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" public String[] parseRescheduleInfo() throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" assert (inputDetails !\u003d null) : \"Input details cannot be null.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] rescheduleInfo \u003d inputDetails.split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" boolean invalidRescheduleInfo \u003d rescheduleInfo.length \u003c 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" if (invalidRescheduleInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(\"☹ OOPS!!! Missing task, or new time details of rescheduling task.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" return rescheduleInfo;","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" * Checks if input details are present.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" * @return True if input details are present.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" public boolean checkInputDetailsAbsent() {","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" return inputDetails \u003d\u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":110}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" * Represents the storage file management system of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" private final String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" * Constructs the storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param filePath File path of the storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves task(to-do) into file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTask(String description) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" String taskToSave \u003d String.format(\"T | 0 | %s\", description);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" this.saveTaskToFile(taskToSave);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves task(deadline) into file.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param deadline Deadline of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTask(String description, String deadline) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" String taskToSave \u003d String.format(\"D | 0 | %s | %s\", description, deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" this.saveTaskToFile(taskToSave);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves task(event) into file.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param from Start date of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param to End date of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTask(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" String taskToSave \u003d String.format(\"E | 0 | %s | %s | %s\", description, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" this.saveTaskToFile(taskToSave);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" * Saves the task straight to the file (lower-level)","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param task String of task to save.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error saving file.","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" public void saveTaskToFile(String task) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":" checkDataFile();","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"victorlaiyeeteng"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath, true))) {","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.newLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.write(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"victorlaiyeeteng"},"content":" * Deletes task from file.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskNumber Index of task to delete.","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error modifying file.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"victorlaiyeeteng"},"content":" public void deleteTaskFromFile(Integer taskNumber) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"victorlaiyeeteng"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"victorlaiyeeteng"},"content":" String currentLine;","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"victorlaiyeeteng"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"victorlaiyeeteng"},"content":" Integer lineNumber \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"victorlaiyeeteng"},"content":" // Copies tasks that are not to be deleted out to temporary list.","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"victorlaiyeeteng"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"victorlaiyeeteng"},"content":" if (!lineNumber.equals(taskNumber)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"victorlaiyeeteng"},"content":" lines.add(currentLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"victorlaiyeeteng"},"content":" lineNumber++;","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"victorlaiyeeteng"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath));","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"victorlaiyeeteng"},"content":" // Writes tasks from temporary list into txt file.","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"victorlaiyeeteng"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.write(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"victorlaiyeeteng"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"victorlaiyeeteng"},"content":" * Load tasks from file into list.","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"victorlaiyeeteng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param list List for file to populate.","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error reading from file.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"victorlaiyeeteng"},"content":" public void loadTasksFromFile(List\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"victorlaiyeeteng"},"content":" checkDataFile();","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"victorlaiyeeteng"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"victorlaiyeeteng"},"content":" String line;","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"victorlaiyeeteng"},"content":" while ((line \u003d fileReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"victorlaiyeeteng"},"content":" processTaskIntoList(line, list);","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"victorlaiyeeteng"},"content":" fileReader.close();","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"victorlaiyeeteng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"victorlaiyeeteng"},"content":" * Processes each task in data txt file format into application\u0027s TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param taskLine Task in data txt file.","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"victorlaiyeeteng"},"content":" * @param list Application\u0027s TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws DukeException Error instantiating Task object.","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":153,"author":{"gitId":"victorlaiyeeteng"},"content":" public void processTaskIntoList(String taskLine, List\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":154,"author":{"gitId":"victorlaiyeeteng"},"content":" String[] formattedLine \u003d taskLine.split(\" \\\\| \");","lastModifiedDate":"2023-09-11"},{"lineNumber":155,"author":{"gitId":"victorlaiyeeteng"},"content":" switch (formattedLine[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"T\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Todo(formattedLine[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"victorlaiyeeteng"},"content":" if (formattedLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"victorlaiyeeteng"},"content":" task.setDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"victorlaiyeeteng"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"D\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Deadline(formattedLine[2], formattedLine[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"victorlaiyeeteng"},"content":" if (formattedLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"victorlaiyeeteng"},"content":" task.setDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"victorlaiyeeteng"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"victorlaiyeeteng"},"content":" case \"E\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"victorlaiyeeteng"},"content":" Task task \u003d new Event(formattedLine[2], formattedLine[3], formattedLine[4]);","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"victorlaiyeeteng"},"content":" if (formattedLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"victorlaiyeeteng"},"content":" task.setDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"victorlaiyeeteng"},"content":" list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"victorlaiyeeteng"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"victorlaiyeeteng"},"content":" default: break;","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"victorlaiyeeteng"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":185,"author":{"gitId":"victorlaiyeeteng"},"content":" * Handles data file existence.","lastModifiedDate":"2023-09-18"},{"lineNumber":186,"author":{"gitId":"victorlaiyeeteng"},"content":" * @throws Exception If there are any errors creating directory or file","lastModifiedDate":"2023-09-18"},{"lineNumber":187,"author":{"gitId":"victorlaiyeeteng"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":188,"author":{"gitId":"victorlaiyeeteng"},"content":" public void checkDataFile() throws Exception {","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"victorlaiyeeteng"},"content":" String fileName \u003d filePath;","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"victorlaiyeeteng"},"content":" Path filePath \u003d Paths.get(fileName);","lastModifiedDate":"2023-09-11"},{"lineNumber":191,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"victorlaiyeeteng"},"content":" if (!Files.exists(filePath.getParent())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"victorlaiyeeteng"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-11"},{"lineNumber":194,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"victorlaiyeeteng"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"victorlaiyeeteng"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":199,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"victorlaiyeeteng":199}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\"","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cInsets top\u003d\"8.0\" right\u003d\"8.0\" bottom\u003d\"8.0\" left\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cCircle radius\u003d\"50.0\" centerX\u003d\"50.0\" centerY\u003d\"50.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"8.0\" right\u003d\"8.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003cAnchorPane","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" fx:controller\u003d\"duke.controller.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"victorlaiyeeteng":27}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testDeadlineStringConversion() {","lastModifiedDate":"2023-09-18"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Lab submission (by: Aug 31 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Lab submission\", \"2023-08-31\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Final Project (by: Nov 25 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Final Project\", \"2023-11-25\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Wedding Planning (by: Mar 5 2028)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Wedding Planning\", \"2028-03-05\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testConstructor_invalidDateFormat_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" String description \u003d \"Return book\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" String byDate \u003d \"2023 10 12\";","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Return book (by: Oct 12 2023)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(description, byDate).toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" String.format(\"Text \u0027%s\u0027 could not be parsed at index 4\", byDate),","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" e.getMessage()","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testDeadlineReschedule() throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Rescheduled Task: [D][ ] Project Final Grading (by: Oct 10 2023)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Project Final Grading\", \"2023-10-01\")","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" .reschedule(","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" \"/by 2023-10-10\",","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" new Storage(\"./data/test.txt\")","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Rescheduled Task: [D][ ] Wedding (by: Oct 22 2028)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Wedding\", \"2023-10-22\")","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":" .reschedule(","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" \"/by 2028-10-22\",","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" new Storage(\"./data/test.txt\")","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testDeadlineReschedule_invalidFormat_exceptionThrown() {","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[D][ ] Wedding (by: Oct 12 2023)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" new Deadline(\"Wedding\", \"2023-09-22\")","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" .reschedule(","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" \"2028-09-22\",","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" new Storage(\"./data/test.txt\")","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Valid Input Syntax: reschedule {taskNumber} /by {newTime}\",","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"victorlaiyeeteng"},"content":" e.getMessage()","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"victorlaiyeeteng":86}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"victorlaiyeeteng"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testEventStringConversion() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Malaysia Trip (from: Aug 12 2023 to: Aug 13 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Malaysia Trip\", \"2023-08-12\", \"2023-08-13\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Camp (from: Oct 11 2023 to: Oct 14 2023)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Camp\", \"2023-10-11\", \"2023-10-14\").toString()","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Birthday Party (from: Oct 15 2023 to: Oct 16 2023)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Birthday Party\", \"2023-10-15\", \"2023-10-16\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testConstructor_invalidDates_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Graduation Trip (from: May 10 2024 to: May 9 2024)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Graduation Trip\", \"2024-05-10\", \"2024-05-09\").toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(\"Start date cannot be after end date\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testEventReschedule() throws DukeException {","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Rescheduled Task: [E][ ] Stay-cation (from: Oct 15 2023 to: Oct 16 2023)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Stay-cation\", \"2023-10-14\", \"2023-10-15\")","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"victorlaiyeeteng"},"content":" .reschedule(","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"victorlaiyeeteng"},"content":" \"/from 2023-10-15 /to 2023-10-16\",","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"victorlaiyeeteng"},"content":" new Storage(\"./data/test.txt\")","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Rescheduled Task: [E][ ] Hackathon (from: Dec 22 2023 to: Dec 24 2023)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Hackathon\", \"2023-08-22\", \"2023-08-24\")","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"victorlaiyeeteng"},"content":" .reschedule(","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"victorlaiyeeteng"},"content":" \"/from 2023-12-22 /to 2023-12-24\",","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"victorlaiyeeteng"},"content":" new Storage(\"./data/test.txt\")","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"victorlaiyeeteng"},"content":" @Test","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"victorlaiyeeteng"},"content":" public void testEventReschedule_invalidFormat_exceptionThrown() {","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"victorlaiyeeteng"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"victorlaiyeeteng"},"content":" \"[E][ ] Sleepover (/from 2023-11-11 /to 2023-11-12)\",","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"victorlaiyeeteng"},"content":" new Event(\"Sleepover\", \"2023-11-01\", \"2023-11-03\")","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"victorlaiyeeteng"},"content":" .reschedule(","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"victorlaiyeeteng"},"content":" \"2023-11-11 2023-11-12\",","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"victorlaiyeeteng"},"content":" new Storage(\"./data/test.txt\")","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"victorlaiyeeteng"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"victorlaiyeeteng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"victorlaiyeeteng"},"content":" assertEquals(","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"victorlaiyeeteng"},"content":" \"Valid Input Syntax: reschedule {taskNumber} /from {newTime} /to {newTime}\",","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"victorlaiyeeteng"},"content":" e.getMessage()","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"victorlaiyeeteng"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"victorlaiyeeteng"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"victorlaiyeeteng"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"victorlaiyeeteng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"victorlaiyeeteng":81}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"victorlaiyeeteng"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"victorlaiyeeteng"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"victorlaiyeeteng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"victorlaiyeeteng"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"victorlaiyeeteng"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"victorlaiyeeteng"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"victorlaiyeeteng"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"victorlaiyeeteng"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"victorlaiyeeteng"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"victorlaiyeeteng":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":"victorlaiyeeteng"},"content":"java -classpath ..\\bin duke.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":{"victorlaiyeeteng":1,"-":20}}] diff --git a/victorlaiyeeteng_ip_master/commits.json b/victorlaiyeeteng_ip_master/commits.json index 510b3a62..02204dac 100644 --- a/victorlaiyeeteng_ip_master/commits.json +++ b/victorlaiyeeteng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"victorlaiyeeteng":[{"date":"2023-08-22","commitResults":[{"hash":"23eb48ace2f0e63d3575503a48b1a86ddc276cfb","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"b9d19870842f1b0187f1837f9baa523574a8d9d3","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"393e3ac30da7b5525d25d01a0a7e3dbbe8a3158b","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"3caa25dfb3c8ca1071cfad287ea22faf58795141","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":3}}},{"hash":"89113780e7b94dc781fc2cb716fbb98d260f5315","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":11}}},{"hash":"0a135a92854a4dd5c9101a5ed584755d6f094189","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"c2b505631dda032e0db82e44705db339602500d9","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":75},"sh":{"insertions":1,"deletions":1}}},{"hash":"c007f373542864cdb9ea9b2d6e49f6fd00dbf08b","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e41a5a0deba4f119817dc2f668b62b9cb3cf11cb","isMergeCommit":false,"messageTitle":"Level-6 v2.0","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":110,"deletions":77}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8cdd3ecccef868fbad4cc5ff6c6a579b7004870f","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":79,"deletions":0}}},{"hash":"2111e8fa6a957d3f51ba6323f8167b7cfd60a97a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f134253ebc17aac726a4aaa9bb65811c54309644","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":29,"deletions":15}}},{"hash":"533a0fec688c57393d94ed60db1f99f6096ffcd9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"d4064834412099b2d88739b8b1bc9cb47511f060","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":275,"deletions":140}}},{"hash":"13de4abbd7c3cd80482756ff87e839f65155a3ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"738897a0c630ed667a9370fbb7d584238b5d0842","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":44,"deletions":6},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"519272a7301c5e90de09d43694f8b150571bb383","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cbc8cd67f923cbb32ae9cb733cb5a35da63927ad","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"683c9e0b6cffbe547807205f9e724b7c18f433d0","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":6},"java":{"insertions":28,"deletions":0}}},{"hash":"b3ceca5ce81bafb3da5784bfddb1cef41e7981d4","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":0}}},{"hash":"9f0dbc46a4291e6468401e892dc46e7f408b34c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"3fb7164d414875d042fab9fa822f47c33be7341d","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"3ec754b0f980441ad136e7838f03b51d9d31dac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"496cf52d0168d25fdad642b00e6ebe45d89396d2","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":0}}},{"hash":"e9fe9cd55bcaa49b10aaf079a76200aa6a27d1c5","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":98,"deletions":71}}},{"hash":"1e3e4eedaf2a0430e32c3cf98320da344d29145a","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"fd3e6286f0140fb31a7a962618bdc0b25680e1e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"766ceeb772abcfad4e0bcdf402db9174337e8ad4","isMergeCommit":true,"messageTitle":"Resolve merge conflicts from branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"1c88462f501975d304ae708b4501209186f1c7da","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"fdd6a734131adc8004e01c23fd20af8a8df20bb4","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":54,"deletions":43}}},{"hash":"652e6ca100fbc6da108e26d743376dbe7bb4a943","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"d42e191735f5c0eefdeabe6ceba8801b8e0e4f76","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":4,"deletions":4},"fxml":{"insertions":56,"deletions":0},"java":{"insertions":348,"deletions":137}}},{"hash":"e76cb8f9e21e47c3d2da9f35f620654c14716ae3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"0161c5f017263389f51193c09b4db12388a769c6","isMergeCommit":false,"messageTitle":"Fix code quality reviews left by Kokseng1","messageBody":"","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"6fa7087dd9619658d54fe41483f9a7ee129c2b27","isMergeCommit":false,"messageTitle":"Configured gradle build file for jar compatibility","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":10,"deletions":4},"txt":{"insertions":1,"deletions":3},"java":{"insertions":26,"deletions":4}}},{"hash":"2bcc374bfb1fce326951fa680154c9e864d92428","isMergeCommit":false,"messageTitle":"Add Java assertions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":23,"deletions":14}}},{"hash":"d6cd459015b553eba303bc2320a50f2706ad106a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from victorlaiyeeteng/branch-A-Assertions","messageBody":"Add Java assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"30141d6df15b33e29cc422d16ce821dd3cd6d0b5","isMergeCommit":false,"messageTitle":"Improve code quality and refactor some poorly written code.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6},"java":{"insertions":109,"deletions":102}}},{"hash":"7a02198ea3023cd5d35fb92be5d77697efa50253","isMergeCommit":true,"messageTitle":"Merge pull request #2 from victorlaiyeeteng/branch-A-CodeQuality","messageBody":"Improve code quality and refactor some poorly written code.","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e44fe37edba50ad7d271db9adfcf080aa60d015c","isMergeCommit":false,"messageTitle":"Add Reschedule command to reschedule deadline and event tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":83,"deletions":0}}},{"hash":"3fce4840b935e169e1da0de232e2e1066ec76b98","isMergeCommit":true,"messageTitle":"Merge pull request #3 from victorlaiyeeteng/branch-B-Snooze","messageBody":"Snooze/Reschedule Feature","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"b4b987b4567abcc2ea36f659fcf5b35ce4fcde80","isMergeCommit":false,"messageTitle":"Refactor long functions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":150,"deletions":57}}}]}]},"authorFileTypeContributionMap":{"victorlaiyeeteng":{"java":1227,"md":2,"fxml":56,"sh":0,"bat":1,"gradle":31,"txt":11}},"authorContributionVariance":{"victorlaiyeeteng":34223.082},"authorDisplayNameMap":{"victorlaiyeeteng":"CS2103T-W16-4 LAI ..CTOR"}} +{"authorDailyContributionsMap":{"victorlaiyeeteng":[{"date":"2023-08-22","commitResults":[{"hash":"23eb48ace2f0e63d3575503a48b1a86ddc276cfb","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"b9d19870842f1b0187f1837f9baa523574a8d9d3","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"393e3ac30da7b5525d25d01a0a7e3dbbe8a3158b","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"3caa25dfb3c8ca1071cfad287ea22faf58795141","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":3}}},{"hash":"89113780e7b94dc781fc2cb716fbb98d260f5315","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":11}}},{"hash":"0a135a92854a4dd5c9101a5ed584755d6f094189","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"c2b505631dda032e0db82e44705db339602500d9","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":75},"sh":{"insertions":1,"deletions":1}}},{"hash":"c007f373542864cdb9ea9b2d6e49f6fd00dbf08b","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e41a5a0deba4f119817dc2f668b62b9cb3cf11cb","isMergeCommit":false,"messageTitle":"Level-6 v2.0","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":110,"deletions":77}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8cdd3ecccef868fbad4cc5ff6c6a579b7004870f","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":79,"deletions":0}}},{"hash":"2111e8fa6a957d3f51ba6323f8167b7cfd60a97a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f134253ebc17aac726a4aaa9bb65811c54309644","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":29,"deletions":15}}},{"hash":"533a0fec688c57393d94ed60db1f99f6096ffcd9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"d4064834412099b2d88739b8b1bc9cb47511f060","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":275,"deletions":140}}},{"hash":"13de4abbd7c3cd80482756ff87e839f65155a3ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"738897a0c630ed667a9370fbb7d584238b5d0842","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":44,"deletions":6},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"519272a7301c5e90de09d43694f8b150571bb383","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cbc8cd67f923cbb32ae9cb733cb5a35da63927ad","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"683c9e0b6cffbe547807205f9e724b7c18f433d0","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":6},"java":{"insertions":28,"deletions":0}}},{"hash":"b3ceca5ce81bafb3da5784bfddb1cef41e7981d4","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":0}}},{"hash":"9f0dbc46a4291e6468401e892dc46e7f408b34c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"3fb7164d414875d042fab9fa822f47c33be7341d","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"3ec754b0f980441ad136e7838f03b51d9d31dac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"496cf52d0168d25fdad642b00e6ebe45d89396d2","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":0}}},{"hash":"e9fe9cd55bcaa49b10aaf079a76200aa6a27d1c5","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":98,"deletions":71}}},{"hash":"1e3e4eedaf2a0430e32c3cf98320da344d29145a","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"fd3e6286f0140fb31a7a962618bdc0b25680e1e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"766ceeb772abcfad4e0bcdf402db9174337e8ad4","isMergeCommit":true,"messageTitle":"Resolve merge conflicts from branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"1c88462f501975d304ae708b4501209186f1c7da","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"fdd6a734131adc8004e01c23fd20af8a8df20bb4","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":54,"deletions":43}}},{"hash":"652e6ca100fbc6da108e26d743376dbe7bb4a943","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"d42e191735f5c0eefdeabe6ceba8801b8e0e4f76","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":4,"deletions":4},"fxml":{"insertions":56,"deletions":0},"java":{"insertions":348,"deletions":137}}},{"hash":"e76cb8f9e21e47c3d2da9f35f620654c14716ae3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"0161c5f017263389f51193c09b4db12388a769c6","isMergeCommit":false,"messageTitle":"Fix code quality reviews left by Kokseng1","messageBody":"","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"6fa7087dd9619658d54fe41483f9a7ee129c2b27","isMergeCommit":false,"messageTitle":"Configured gradle build file for jar compatibility","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":10,"deletions":4},"txt":{"insertions":1,"deletions":3},"java":{"insertions":26,"deletions":4}}},{"hash":"2bcc374bfb1fce326951fa680154c9e864d92428","isMergeCommit":false,"messageTitle":"Add Java assertions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":23,"deletions":14}}},{"hash":"d6cd459015b553eba303bc2320a50f2706ad106a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from victorlaiyeeteng/branch-A-Assertions","messageBody":"Add Java assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"30141d6df15b33e29cc422d16ce821dd3cd6d0b5","isMergeCommit":false,"messageTitle":"Improve code quality and refactor some poorly written code.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6},"java":{"insertions":109,"deletions":102}}},{"hash":"7a02198ea3023cd5d35fb92be5d77697efa50253","isMergeCommit":true,"messageTitle":"Merge pull request #2 from victorlaiyeeteng/branch-A-CodeQuality","messageBody":"Improve code quality and refactor some poorly written code.","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e44fe37edba50ad7d271db9adfcf080aa60d015c","isMergeCommit":false,"messageTitle":"Add Reschedule command to reschedule deadline and event tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":83,"deletions":0}}},{"hash":"3fce4840b935e169e1da0de232e2e1066ec76b98","isMergeCommit":true,"messageTitle":"Merge pull request #3 from victorlaiyeeteng/branch-B-Snooze","messageBody":"Snooze/Reschedule Feature","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"b4b987b4567abcc2ea36f659fcf5b35ce4fcde80","isMergeCommit":false,"messageTitle":"Refactor long functions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":150,"deletions":57}}}]},{"date":"2023-09-18","commitResults":[{"hash":"20be86add49a7e347580b953ba68233ca2421d84","isMergeCommit":false,"messageTitle":"Enable dynamic resizing of dialogBox","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":3,"deletions":0}}},{"hash":"f95930ba095de5a5f1f96bc703ca9c2c1cfc5d57","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}},{"hash":"28ecbddc3294a7491ab95be3b1cca77fc70e8c47","isMergeCommit":false,"messageTitle":"Fix code quality of booleans naming","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"6ef6789a26bdb14504f45dd523d1f545087ad92d","isMergeCommit":false,"messageTitle":"Add JUnit tests for rescheduling methods","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":81,"deletions":0},"java":{"insertions":128,"deletions":29}}},{"hash":"4af4ebf400bd5019363931ed4393894b7f0ed0e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{}},{"hash":"9400b86d0d8b3319be2888b5a4119cc2fa972231","isMergeCommit":false,"messageTitle":"Update test data files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":82},"java":{"insertions":6,"deletions":6}}},{"hash":"f3aedf8cd93934ec0a9811d00d6b5640ea8044cd","isMergeCommit":false,"messageTitle":"Fix GUI styling and add Ui png file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":8},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":19,"deletions":26}}}]}]},"authorFileTypeContributionMap":{"victorlaiyeeteng":{"java":1322,"md":2,"fxml":56,"sh":0,"bat":1,"gradle":31,"txt":21}},"authorContributionVariance":{"victorlaiyeeteng":33542.605},"authorDisplayNameMap":{"victorlaiyeeteng":"CS2103T-W16-4 LAI ..CTOR"}} diff --git a/woojiahao_ip_master/authorship.json b/woojiahao_ip_master/authorship.json index cc911ea9..0e91efa2 100644 --- a/woojiahao_ip_master/authorship.json +++ b/woojiahao_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"# Cyrus","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003e Worry no more about your tasks!","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"**Cyrus** is a hassle free task list manager built with [Java.](https://www.java.com/en/)","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"## Core features","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"* Add events","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"* Add deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"* Add regular todos","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"* Mark/unmark tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"* Delete tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"* Save tasks to file","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"## Building","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"To get started with `Cyrus`, you can use the following steps:","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"1. Clone the repository","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"git clone https://github.com/woojiahao/ip","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"```","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"2. Change to corresponding directory","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"cd ip/","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"3. Build the project","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"./gradlew shadowJar","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"4. Run the built jar","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"java -jar build/libs/cyrus.jar","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"```","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":"## Pending features","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":"- [ ] GUI for interaction","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"woojiahao":40,"-":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":"woojiahao"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-03"},{"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":"woojiahao"},"content":" implementation group: \u0027com.google.code.gson\u0027, name: \u0027gson\u0027, version: \u00272.10.1\u0027","lastModifiedDate":"2023-08-29"},{"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":"woojiahao"},"content":" mainClass.set(\"cyrus.Launcher\")","lastModifiedDate":"2023-09-04"},{"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":"woojiahao"},"content":" archiveBaseName \u003d \"cyrus\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"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"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" version \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" modules \u003d [\u0027javafx.base\u0027, \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027]","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"sourceSets {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" main {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" resources {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" srcDirs \"src/main/resources\"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":"processResources {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" duplicatesStrategy \u003d DuplicatesStrategy.EXCLUDE","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":26,"-":40}},{"path":"src/main/java/cyrus/Cyrus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandError;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import cyrus.storage.FileStorage;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import cyrus.storage.IStorage;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * Entry point of Cyrus interface.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"public class Cyrus {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" private final IStorage storage \u003d new FileStorage(\"data/data.json\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" private final TaskList taskList \u003d new TaskList(storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private final Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" * Parses input into {@code ParseInfo}.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * @param input user input to parse.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * @return parsed user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" public ParseInfo parseInput(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" return parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" * Executes a given command given the {@code ParseInfo}.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo parsed information of the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" * @return {@code String} output of command if successfully executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if there is an error with the input.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" public String dispatchAndExecute(ParseInfo parseInfo) throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" Command command \u003d parser.dispatchCommand(taskList, parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" String[] lines \u003d command.execute();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e text \u003d","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" Arrays.stream(lines)","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" .flatMap((line) -\u003e Stream.of(line.split(\"\\n\")))","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" return String.join(\"\\n\", text);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" return taskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":55}},{"path":"src/main/java/cyrus/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.ui.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Launcher for Cyrus Gui.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"woojiahao":14}},{"path":"src/main/java/cyrus/adapters/LocalDateAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.adapters;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.TypeAdapter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.stream.JsonReader;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.stream.JsonWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * GSON adapter to properly handle {@code LocalDate} values in the various {@code Task}.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class LocalDateAdapter extends TypeAdapter\u003cLocalDate\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * Converts {@code LocalDateAdapter} to the input format of {@code dd/MM/yyyy} when writing to JSON.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * @param jsonWriter writes the value to the JSON.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * @param localDate the Java object to write. May be null.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * @throws IOException if {@code jsonWriter} encounters an error with writing.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" public void write(JsonWriter jsonWriter, LocalDate localDate) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" jsonWriter.value(DateUtility.toInputFormat(localDate));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * Deserializes {@code LocalDate} to the same input format as {@code dd/MM/yyyy}.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param jsonReader reads the value from JSON.","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @return {@code LocalDate} value.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * @throws IOException if {@code jsonReader} encounters error with reading.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" public LocalDate read(JsonReader jsonReader) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" String input \u003d jsonReader.nextString();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" return DateUtility.parse(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":40}},{"path":"src/main/java/cyrus/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * Command to add a {@code Deadline} to the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public AddDeadlineCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * To add a {@code Deadline}, must ensure that the deadline has an argument (i.e. name of the","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * deadline) and it contains the {@code by} option which corresponds to a valid {@code","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * LocalDate} format which is {@code dd/MM/yyyy}.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no arguments are present, no {@code by} option is provided, or date","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" * format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Deadline is missing a body!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d this.parseInfo.getOptions();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" if (!options.containsKey(\"by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid deadline format: missing /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" String deadlineName \u003d this.parseInfo.getArgument();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" String deadlineBy \u003d this.parseInfo.getOptions().get(\"by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" LocalDate deadlineDate \u003d DateUtility.parse(deadlineBy);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid deadline format: invalid by string, must be format dd/MM/yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" Task deadline \u003d new Deadline(deadlineName, deadlineDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" this.taskList.addTask(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" deadline.toString(),","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":54}},{"path":"src/main/java/cyrus/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * Command to add an {@code Event} to the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public AddEventCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * To add an {@code Event}, must ensure that the event has an argument (i.e. name of the","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * deadline) and it contains a {@code from} and {@code to} option which corresponds to a valid","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * {@code LocalDate} format which is {@code dd/MM/yyyy}.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no arguments are present, no {@code from} or {@code to} option is","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" * provided, or date formats are invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Event is missing a body!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d this.parseInfo.getOptions();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" if (!options.containsKey(\"from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: missing /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" if (!options.containsKey(\"to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: missing /to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" String eventName \u003d this.parseInfo.getArgument();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" String eventFrom \u003d options.get(\"from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" String eventTo \u003d options.get(\"to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" LocalDate eventFromDate \u003d DateUtility.parse(eventFrom);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" LocalDate eventToDate \u003d DateUtility.parse(eventTo);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" if (eventFromDate \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: invalid from string, must be format dd/MM/yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" if (eventToDate \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: invalid to string, must be format dd/MM/yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" Task event \u003d new Event(eventName, eventFromDate, eventToDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" this.taskList.addTask(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" event.toString(),","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":65}},{"path":"src/main/java/cyrus/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.ToDo;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Command to add a {@code ToDo} to the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public AddTodoCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" * To add a {@code ToDo}, must ensure that the todo has an argument (i.e. name of the","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * deadline).","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no arguments are present.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"ToDo is missing a body!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" String content \u003d String.join(\" \", this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" ToDo todo \u003d new ToDo(content);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.taskList.addTask(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" todo.toString(),","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":35}},{"path":"src/main/java/cyrus/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to exit the program.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public ByeCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" \"Bye. Hope to see you again!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":20}},{"path":"src/main/java/cyrus/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Represents a general command to operate on a {@code TaskList} and a given {@code ParseInfo}","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * {@code TaskList} made {@code protected final} since sub-classes should be able to access it.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" protected final TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * {@code ParseInfo} made {@code protected final} since sub-classes should be able to access it.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" protected final ParseInfo parseInfo;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * Base constructor for a type of command.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param taskList {@code TaskList} with available tasks to operate on.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo parsed information from {@code Parser}.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" public Command(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" this.parseInfo \u003d parseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * Behavior of command that operates on the given {@code TaskList} and {@code ParseInfo}.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if there is a validation error with the {@code ParseInfo}","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public abstract String[] execute() throws CommandError;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":36}},{"path":"src/main/java/cyrus/commands/CommandError.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":" * Custom error that occurs when a {@code Command} executes.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":" * \u003cp\u003eOften occurs when the input is parsed wrongly.\u003c/p\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"public class CommandError extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" public CommandError(String reason) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" super(reason);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":12}},{"path":"src/main/java/cyrus/commands/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":" * Types of commands available to the bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" ADD_TODO,","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" ADD_EVENT,","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" ADD_DEADLINE,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" BYE,","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" FIND_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" DELETE_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" LIST_TASKS,","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" MARK_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" VIEW_STATISTICS,","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" UNMARK_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" UNKNOWN;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * Maps a {@code String} input to a {@code CommandType}.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param input input to map","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * @return mapped {@code CommandType}","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" public static CommandType fromString(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" switch (input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" return BYE;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" return ADD_TODO;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" return ADD_EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" return ADD_DEADLINE;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" return DELETE_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" return LIST_TASKS;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" return MARK_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" return UNMARK_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" return FIND_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" case \"statistics\":","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" return VIEW_STATISTICS;","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" return UNKNOWN;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":51}},{"path":"src/main/java/cyrus/commands/DeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Command to delete a {@code Task} from the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class DeleteTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public DeleteTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" * Deletes the {@code Task} corresponding to the command\u0027s argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no argument is present or if the value given is out of index or not","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * a number.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Missing task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" int i \u003d Integer.parseInt(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" Task task \u003d this.taskList.getTask(i - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" this.taskList.removeTask(i - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" \"Noted. I\u0027ve removed this task:\",","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" task.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d cyrus.tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: must be integer\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: index out of bounds\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":41}},{"path":"src/main/java/cyrus/commands/FindTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * Command to find {@code Task} given keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"public class FindTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" public FindTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * Returns list of matching tasks given keyword, taken from argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" var tasks \u003d this.taskList.findTask(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" \"No tasks found.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" lines.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" for (var task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" lines.add(task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" return lines.toArray(String[]::new);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":35}},{"path":"src/main/java/cyrus/commands/ListTasksCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to list out the {@code Task} within the {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class ListTasksCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public ListTasksCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Print the string representation of the {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" public String[] execute() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" this.taskList.toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":23}},{"path":"src/main/java/cyrus/commands/MarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to mark a {@code Task} in the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class MarkTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public MarkTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Marks the {@code Task} corresponding to the command\u0027s argument as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no argument is present or if the value given is out of bounds or not","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * a number.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Missing task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" int i \u003d Integer.parseInt(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.taskList.markTask(i - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \"Nice! I\u0027ve marked this task as done:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" this.taskList.getTask(i - 1).toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: must be integer\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: index out of bounds\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":39}},{"path":"src/main/java/cyrus/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to represent when an invalid command is provided.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public UnknownCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Relies on the thrown {@code CommandError}.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError by default","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"I\u0027m sorry, I don\u0027t know what that means :(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":23}},{"path":"src/main/java/cyrus/commands/UnmarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to unmark a {@code Task} in the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class UnmarkTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public UnmarkTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Marks the {@code Task} corresponding to the command\u0027s argument as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no argument is present or if the value given is out of bounds or not","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * a number.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Missing task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" int i \u003d Integer.parseInt(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.taskList.unmarkTask(i - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \"OK, I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" this.taskList.getTask(i - 1).toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: must be integer\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: index out of bounds\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":39}},{"path":"src/main/java/cyrus/commands/ViewStatisticsCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to view user statistics of task completion.","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class ViewStatisticsCommand extends Command {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * Base constructor for a type of command.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * @param taskList {@code TaskList} with available tasks to operate on.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo parsed information from {@code Parser}.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public ViewStatisticsCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" if (this.taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"You do not have any tasks to view the statistics of!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" \"Pulling up your latest statistics!\",","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"woojiahao":30}},{"path":"src/main/java/cyrus/parser/ParseInfo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Packet of information about the parsing response.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * \u003cp\u003eModelled after CLI applications where the {@code argument} is the text before any options","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * and an {@code option} is the values of \"flags\".\u003c/p\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"public class ParseInfo {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Default {@code ParseInfo} for an empty command.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" public static final ParseInfo EMPTY \u003d new ParseInfo(","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" CommandType.UNKNOWN,","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" \"\",","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" new HashMap\u003c\u003e()","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private final CommandType commandType;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" private final String argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" private final HashMap\u003cString, String\u003e options;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * Constructor for {@code Parser} parsed data.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" * @param commandType type of command parsed.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param argument value of command outside of options.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @param options key-value pairs associated with command.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" public ParseInfo(CommandType commandType, String argument, HashMap\u003cString, String\u003e options) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" this.argument \u003d argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" this.options \u003d options;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" * Returns if parsed command has no argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" * @return true if parsed command has no arguments","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" public boolean hasNoArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" return this.argument.equals(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" * Returns {@code argument} of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" * @return argument of command","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" public String getArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" return this.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" * Create a copy of the options to avoid accidentally modifying the current options map.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" * @return Copy of options hashmap.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public HashMap\u003cString, String\u003e getOptions() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" return new HashMap\u003c\u003e(this.options);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" * Returns {@code commandType} of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" * @return command type","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" public CommandType getCommandType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" return this.commandType;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":75}},{"path":"src/main/java/cyrus/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.AddTodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.ByeCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.DeleteTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.FindTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.ListTasksCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.MarkTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.UnknownCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.UnmarkTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.ViewStatisticsCommand;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * Parses user input into a command format. See {@code ParseInfo} for more information about the","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" * parsed form.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * Character(s) that come before an option is given.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" private static final String OPTION_LEAD \u003d \"/\";","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * Dispatches {@code Command} given a {@code taskList} and {@code parseInfo} about the incoming","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" * string command.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" * @param taskList {@code TaskList} of tasks to provide to the command when running","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo {@code ParseInfo} parsed from command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" * @return appropriate {@code Command}","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" public Command dispatchCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" switch (parseInfo.getCommandType()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" case ADD_TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" return new AddTodoCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" case ADD_EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" return new AddEventCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" case ADD_DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" return new AddDeadlineCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" case BYE:","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" return new ByeCommand(taskList, parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" case FIND_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" return new FindTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" case DELETE_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" return new DeleteTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" case LIST_TASKS:","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" return new ListTasksCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" case MARK_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" return new MarkTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" case UNMARK_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" return new UnmarkTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" case VIEW_STATISTICS:","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" return new ViewStatisticsCommand(taskList, parseInfo);","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" return new UnknownCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" * Perform simple parsing on the user input where we read tokens in while no /[word] is","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" * encountered.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" * @param line Line to parse","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" public ParseInfo parse(String line) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" String input \u003d line.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" if (input.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" return ParseInfo.EMPTY;","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" String[] parts \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e argumentParts \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" // Parse the argument first","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" while (i \u003c parts.length) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" if (isPartValidOption(parts[i])) {","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" argumentParts.add(parts[i++]);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" String argument \u003d String.join(\" \", argumentParts);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" while (i \u003c parts.length) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" String key \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e acc \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" if (isPartValidOption(parts[i])) {","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" key \u003d parts[i].substring(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" while (++i \u003c parts.length \u0026\u0026 !(isPartValidOption(parts[i]))) {","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" acc.add(parts[i]);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" options.put(key, String.join(\" \", acc));","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" return new ParseInfo(CommandType.fromString(parts[0]), argument, options);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" private boolean isPartValidOption(String part) {","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" return part.startsWith(OPTION_LEAD) \u0026\u0026 part.length() !\u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":113}},{"path":"src/main/java/cyrus/storage/FileStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static java.lang.Boolean.parseBoolean;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import java.lang.reflect.Modifier;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.reflect.TypeToken;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"import cyrus.adapters.LocalDateAdapter;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * Storage of task list using JSON files.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"public class FileStorage implements IStorage {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" private static final Gson GSON \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" new GsonBuilder()","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" .excludeFieldsWithModifiers(Modifier.TRANSIENT)","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" .setPrettyPrinting()","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" .create();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" private final String dataFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" * Constructs {@code FileStorage} instance given file path to read and write to.","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" * @param dataFilePath file path to read/write data to/from.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" public FileStorage(String dataFilePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" assert !dataFilePath.trim().equals(\"\") : \"Data file path cannot be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" this.dataFilePath \u003d dataFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" * Loads a list of {@code Task} from a file, determined by {@code dataFilePath}.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" * @return list of {@code Task} from file.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" * @throws AssertionError if task format is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" // TODO: Figure out a better way to handle file IO errors in the code","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" // Potentially just delete and re-create a blank file (but that means any existing data is","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" // immediately lost)","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" Type listType \u003d new TypeToken\u003cList\u003cHashMap\u003cString, String\u003e\u003e\u003e() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" }.getType();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" List\u003cHashMap\u003cString, String\u003e\u003e jsonTasks \u003d GSON.fromJson(br, listType);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e fileTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" if (jsonTasks \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" for (HashMap\u003cString, String\u003e entry : jsonTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" enforceFields(entry);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" String type \u003d entry.get(\"type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" task \u003d new ToDo(entry.get(\"name\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" LocalDate deadlineDate \u003d DateUtility.parse(entry.get(\"due\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid deadline format\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" task \u003d new Deadline(entry.get(\"name\"), deadlineDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" LocalDate fromDate \u003d DateUtility.parse(entry.get(\"from\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" LocalDate toDate \u003d DateUtility.parse(entry.get(\"to\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid from/to format\");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" task \u003d new Event(entry.get(\"name\"), fromDate, toDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid task type found in data.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" task.setDone(parseBoolean(entry.get(\"status\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" if (entry.containsKey(\"completed_date\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" LocalDate completedDate \u003d DateUtility.parse(entry.get(\"completed_date\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" assert completedDate !\u003d null : \"Invalid completed date format\";","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" task.setCompletedDate(completedDate);","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" fileTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" return fileTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" createDataFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" System.out.println(\"Failed to read cyrus.tasks from data file\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" * Saves a list of tasks into a JSON file.","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" * @param tasks list of tasks to save","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":" public void save(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":" GSON.toJson(tasks, bw);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" System.out.println(\"Failed to save cyrus.tasks to data file\");","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" private void createDataFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" File file \u003d new File(dataFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"woojiahao"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"woojiahao"},"content":" } catch (IOException ne) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"woojiahao"},"content":" System.out.println(\"Unable to create file, Cyrus cannot run\");","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"woojiahao"},"content":" private void enforceFields(HashMap\u003cString, String\u003e map) {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"woojiahao"},"content":" String[] mandatoryKeys \u003d {\"type\", \"status\", \"name\"};","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"woojiahao"},"content":" Consumer\u003cString[]\u003e checkKeys \u003d (keys) -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"woojiahao"},"content":" for (String key : keys) {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"woojiahao"},"content":" assert map.containsKey(key) : String.format(\"All entries in data.json must contain \\\"%s\\\" field\", key);","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"woojiahao"},"content":" checkKeys.accept(mandatoryKeys);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"woojiahao"},"content":" String type \u003d map.get(\"type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"woojiahao"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"woojiahao"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"woojiahao"},"content":" checkKeys.accept(new String[]{\"due\"});","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"woojiahao"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"woojiahao"},"content":" checkKeys.accept(new String[]{\"from\", \"to\"});","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":168}},{"path":"src/main/java/cyrus/storage/IStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Interface to allow different types of storage to be used.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public interface IStorage {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e load();","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" void save(List\u003cTask\u003e tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":14}},{"path":"src/main/java/cyrus/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * Deadline task that contains the name of the deadline and the due date (i.e. {@code deadline}.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"type\")","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" private static final String TYPE \u003d \"deadline\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"due\")","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * Create Deadline with name and deadline date.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * @param name name of deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param deadline date of deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" public Deadline(String name, LocalDate deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" return String.format(\"[D] %s (by: %s)\", super.toString(), DateUtility.formatLocalDate(this.deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":33}},{"path":"src/main/java/cyrus/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * Event task that contains the name of the event as well as when the event starts (i.e. {@code","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * from}) and ends (i.e. {@code to}).","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"type\")","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" private static final String TYPE \u003d \"event\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * Create Event with name and event to and from dates.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param name name of deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * @param from date event starts from.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" * @param to date event lasts to.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" \"[E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" DateUtility.formatLocalDate(this.from),","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" DateUtility.formatLocalDate(this.to)","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":42}},{"path":"src/main/java/cyrus/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Represents general task stored within the {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public final String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"status\")","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"completed_date\")","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" private LocalDate completedDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * Base constructor to set Task name.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * @param name name of Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" * Set {@code done} value.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * @param done value to set to","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" public void setDone(boolean done) {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public void setCompletedDate(LocalDate completedDate) {","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" this.completedDate \u003d completedDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" * Returns the value of {@code isDone}.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" * @return {@code isDone} value.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" return isDone;","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" * Returns the date completed of task.","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" * @return {@code completedDate} value.","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" public LocalDate getCompletedDate() {","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" return completedDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" * Custom string representation of {@code Task}.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" * @return string representation of {@code Task}","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.name);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":66}},{"path":"src/main/java/cyrus/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.IntStream;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.storage.IStorage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" * Wrapper around the list of {@code Task}.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private final IStorage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * Create TaskList with given {@code Storage} mechanism.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * @param storage {@code IStorage} mechanism to store task list after every action.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" public TaskList(IStorage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * Adds task and saves to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param task {@code Task} to add","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" this.saveTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" * Removes task by index and saves tto file.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" * @param index index position of task to remove","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" this.saveTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" * Marks given task at {@code index} as done, updating the completed date to be the latest time if not previously","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" * already completed.","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" * @param index index of task to mark as completed.","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" var task \u003d tasks.get(index);","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" if (task.getIsDone()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" // If already done, do nothing","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" task.setDone(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" task.setCompletedDate(LocalDate.now());","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" saveTasks();","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" * Unmarks given task at {@code index} as not done, updating the completed date to be null.","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" * @param index index of task to mark as incompleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" var task \u003d tasks.get(index);","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" task.setDone(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" task.setCompletedDate(null);","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" saveTasks();","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":" * Finds {@code Task} whose name matches the given {@code keyword}.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" * @param keyword keyword to find task.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" * @return all tasks that match the {@code keyword}.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" public List\u003cTask\u003e findTask(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" return this.tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" .stream()","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" .filter(task -\u003e task.name.contains(keyword))","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" * Get size of current {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" * @return size of {@code TaskList}","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" * Get {@code Task} given {@code index}.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" * @param index index position of task to update","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" * @return {@code Task} corresponding to the {@code index}","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" * Generates the task distribution across the three types of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" * @return {@code HashMap} of task name to count.","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" public HashMap\u003cString, Long\u003e getTaskDistribution() {","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, Long\u003e distribution \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" long todoCount \u003d tasks.stream().filter(task -\u003e task instanceof ToDo).count();","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":" long deadlineCount \u003d tasks.stream().filter(task -\u003e task instanceof Deadline).count();","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" long eventCount \u003d tasks.stream().filter(task -\u003e task instanceof Event).count();","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" distribution.put(\"To-Do\", todoCount);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" distribution.put(\"Deadline\", deadlineCount);","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" distribution.put(\"Event\", eventCount);","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" return distribution;","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":" * Generates the latest week\u0027s task distribution.","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" * @return {@code HashMap} of date to count.","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" public HashMap\u003cLocalDate, Long\u003e getLatestWeekTaskDistribution() {","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cLocalDate, Long\u003e distribution \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":" LocalDate earliestDate \u003d LocalDate.now().minusDays(7);","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e filteredTasks \u003d tasks.stream()","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" .filter(task -\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" task.getCompletedDate() !\u003d null","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" \u0026\u0026 (task.getCompletedDate().isEqual(earliestDate)","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":" || task.getCompletedDate().isAfter(earliestDate)))","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"woojiahao"},"content":" for (var task : filteredTasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"woojiahao"},"content":" long value \u003d distribution.getOrDefault(task.getCompletedDate(), 0L);","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"woojiahao"},"content":" distribution.put(task.getCompletedDate(), value + 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"woojiahao"},"content":" return distribution;","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"woojiahao"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"woojiahao"},"content":" return \"You do not have any tasks, use todo, deadline, or event to add new ones!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e formattedTasks \u003d IntStream","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"woojiahao"},"content":" .range(0, tasks.size())","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"woojiahao"},"content":" .mapToObj((j) -\u003e String.format(\"%d. %s\", j + 1, this.tasks.get(j)))","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"woojiahao"},"content":" formattedTasks.add(0, \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"woojiahao"},"content":" return String.join(\"\\n\", formattedTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"woojiahao"},"content":" * Helper function to save the current list of tasks to the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"woojiahao"},"content":" private void saveTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"woojiahao"},"content":" this.storage.save(this.tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":166}},{"path":"src/main/java/cyrus/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":" * To-Do task that only includes the name of the task to complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"type\")","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" private static final String TYPE \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" return String.format(\"[T] %s\", super.toString());","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":20}},{"path":"src/main/java/cyrus/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Dialog box to display bot/user text.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"public class DialogBox extends VBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" private HBox userInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private Label username;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * Constructor to create a DialogBox dynamically.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" * @param text text to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param user username of person sending the message.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @param img image to display for the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" public DialogBox(String text, String user, Image img, Color color) {","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" username.setText(user);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" dialog.setTextFill(color);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" public static DialogBox getDialog(String text, String user, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" return new DialogBox(text, user, img, Color.BLACK);","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" public static DialogBox getDialog(String text, String user, Image img, Color color) {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" return new DialogBox(text, user, img, color);","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"woojiahao":57}},{"path":"src/main/java/cyrus/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.Cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * Entry point for initializing and loading the MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private static final Cyrus CYRUS \u003d new Cyrus();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" public void start(Stage primaryStage) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" primaryStage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" primaryStage.setResizable(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setCyrus(CYRUS);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" primaryStage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":32}},{"path":"src/main/java/cyrus/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import java.util.Timer;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import cyrus.Cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandError;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.PieChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.XYChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"import javafx.stage.Modality;","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" * Entry point for Cyrus Gui.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" private final Image userImage \u003d new Image(","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaUser.png\"))","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" private final Image botImage \u003d new Image(","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"))","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" private Cyrus cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" public void setCyrus(Cyrus d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" cyrus \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"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":67,"author":{"gitId":"woojiahao"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" ParseInfo parseInfo \u003d cyrus.parseInput(userText);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" if (parseInfo.equals(ParseInfo.EMPTY)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" putConversation(userText, \"Missing input!\", true);","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":" String cyrusResponse \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" boolean isError \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" cyrusResponse \u003d cyrus.dispatchAndExecute(parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" } catch (CommandError e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" cyrusResponse \u003d e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" isError \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" } finally {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" putConversation(userText, cyrusResponse, isError);","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" if (parseInfo.getCommandType().equals(CommandType.VIEW_STATISTICS)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" // Open the statistics dashboard","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":" openStatisticsDashboard();","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" if (parseInfo.getCommandType() \u003d\u003d CommandType.BYE) {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" Timer timer \u003d new Timer();","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" timer.schedule(new TimerTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":" }, 1000);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" private void putConversation(String userText, String cyrusText, boolean isError) {","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" DialogBox.getDialog(userText, \"User\", userImage),","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" DialogBox.getDialog(cyrusText, \"Cyrus\", botImage, isError ? Color.RED : Color.BLACK)","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" private void openStatisticsDashboard() {","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, Long\u003e tasksDistribution \u003d cyrus.getTaskList().getTaskDistribution();","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" var pieChartData \u003d FXCollections.\u003cPieChart.Data\u003eobservableArrayList();","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" for (var entry : tasksDistribution.entrySet()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" pieChartData.add(new PieChart.Data(entry.getKey(), entry.getValue()));","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cLocalDate, Long\u003e weeklyTasksCompletedDistribution \u003d cyrus.getTaskList().getLatestWeekTaskDistribution();","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" var lineChartData \u003d new XYChart.Series\u003cString, Long\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" for (var entry : weeklyTasksCompletedDistribution.entrySet()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" lineChartData.getData().add(","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" new XYChart.Data\u003c\u003e(DateUtility.toInputFormat(entry.getKey()), entry.getValue())","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":" if (weeklyTasksCompletedDistribution.size() \u003e 0) {","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" var sortedEntries \u003d lineChartData","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":" .getData()","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" .stream()","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" .sorted(Comparator.comparing(XYChart.Data::getXValue))","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" lineChartData.setData(FXCollections.observableArrayList(sortedEntries));","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(getClass().getResource(\"/view/StatisticsDashboard.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.setController(new StatisticsDashboard(pieChartData, lineChartData));","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" VBox window \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":" Scene scene \u003d new Scene(window);","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"woojiahao"},"content":" Stage stage \u003d new Stage();","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"woojiahao"},"content":" stage.initModality(Modality.APPLICATION_MODAL);","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"woojiahao"},"content":" stage.setTitle(\"Statistics Dashboard\");","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"woojiahao"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"woojiahao"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"woojiahao"},"content":" stage.setAlwaysOnTop(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"woojiahao"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"woojiahao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":150}},{"path":"src/main/java/cyrus/ui/StatisticsDashboard.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.net.URL;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.ResourceBundle;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.Initializable;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.LineChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.PieChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.XYChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Popup to view statistics of the use of the task list.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"public class StatisticsDashboard extends VBox implements Initializable {","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" private PieChart taskDistribution;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" private LineChart\u003cString, Long\u003e weeklyTaskCompletionProgress;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private final ObservableList\u003cPieChart.Data\u003e pieChartData;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" private final XYChart.Series\u003cString, Long\u003e lineChartData;","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" * Empty constructor.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" public StatisticsDashboard() {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" this(null, null);","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" * Constructor for creating a StatisticsDashboard controller.","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" public StatisticsDashboard(","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" ObservableList\u003cPieChart.Data\u003e pieChartData,","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" XYChart.Series\u003cString, Long\u003e lineChartData","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" ) {","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" this.pieChartData \u003d pieChartData;","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" this.lineChartData \u003d lineChartData;","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" public void initialize(URL location, ResourceBundle resources) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" taskDistribution.setData(pieChartData);","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" weeklyTaskCompletionProgress.getData().add(lineChartData);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"woojiahao":49}},{"path":"src/main/java/cyrus/utility/DateUtility.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.utility;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Utility to deal with {@code LocalDate}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class DateUtility {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" private static final DateTimeFormatter INPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" private static final DateTimeFormatter OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Parse a string into a {@code LocalDate} of format {@code dd/MM/yyyy}.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @param str string to parse","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * @return {@code LocalDate} if the string is of valid format, else {@code null}","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" public static LocalDate parse(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" return LocalDate.parse(str, INPUT_FORMATTER);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * Formats {@code LocalDate} to output format of {@code dd MMMM yyyy} such as {@code 15","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" * September 2024}.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @param ld {@code LocalDate} to format","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * @return date formatted in {@code dd MMMM yyyy}","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public static String formatLocalDate(LocalDate ld) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" return ld.format(OUTPUT_FORMATTER);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" * Formats {@code LocalDate} to output format of {@code dd/MM/yyyy} such as {@code 15/09/2024}.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" * @param ld {@code LocalDate} to format","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" * @return date formatted in {@code dd/MM/yyyy}","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" public static String toInputFormat(LocalDate ld) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" if (ld \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" return null;","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" return ld.format(INPUT_FORMATTER);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":51}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.geometry.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.image.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.text.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" type\u003d\"javafx.scene.layout.VBox\" xmlns\u003d\"http://javafx.com/javafx/17.0.2-ea\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" \u003cHBox fx:id\u003d\"userInfo\" prefWidth\u003d\"200.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"25.0\" fitWidth\u003d\"25.0\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" \u003cRegion prefWidth\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" \u003cLabel fx:id\u003d\"username\" prefHeight\u003d\"25.0\" prefWidth\u003d\"57.0\" text\u003d\"Username\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"TOP_RIGHT\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"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.2-ea\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"cyrus.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"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":8,"author":{"gitId":"woojiahao"},"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":9,"author":{"gitId":"woojiahao"},"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":10,"author":{"gitId":"woojiahao"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":12}},{"path":"src/main/resources/view/StatisticsDashboard.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.CategoryAxis?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.LineChart?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.NumberAxis?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.PieChart?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"\u003cVBox prefHeight\u003d\"600.0\" prefWidth\u003d\"1000.0\" xmlns\u003d\"http://javafx.com/javafx/17.0.2-ea\"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" \u003cHBox alignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" \u003cLabel text\u003d\"Usage Statistics\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" \u003cFont name\u003d\"System Font\" size\u003d\"24.0\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" \u003cInsets bottom\u003d\"15.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" \u003cHBox prefHeight\u003d\"545.0\" prefWidth\u003d\"800.0\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" \u003cPieChart fx:id\u003d\"taskDistribution\" title\u003d\"Distribution of Tasks\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" \u003cLineChart title\u003d\"Weekly Task Completion Progress\" fx:id\u003d\"weeklyTaskCompletionProgress\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" \u003cxAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" \u003cCategoryAxis side\u003d\"BOTTOM\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" \u003c/xAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \u003cyAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" \u003cNumberAxis side\u003d\"LEFT\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" \u003c/yAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" \u003c/LineChart\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"woojiahao":35}},{"path":"src/test/java/cyrus/commands/CommandTypeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class CommandTypeTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public void testFromString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" var expected \u003d new HashMap\u003cString, CommandType\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" String[] testStrings \u003d {\"bye\", \"todo\", \"deadline\", \"event\", \"delete\", \"list\", \"mark\", \"unmark\", \"nonsense\"};","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" expected.put(\"bye\", CommandType.BYE);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" expected.put(\"todo\", CommandType.ADD_TODO);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" expected.put(\"deadline\", CommandType.ADD_DEADLINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" expected.put(\"event\", CommandType.ADD_EVENT);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" expected.put(\"delete\", CommandType.DELETE_TASK);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" expected.put(\"list\", CommandType.LIST_TASKS);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" expected.put(\"mark\", CommandType.MARK_TASK);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" expected.put(\"unmark\", CommandType.UNMARK_TASK);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" expected.put(\"nonsense\", CommandType.UNKNOWN);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" for (var test : testStrings) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" assertEquals(expected.get(test), CommandType.fromString(test));","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":28}},{"path":"src/test/java/cyrus/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" private static final Parser PARSER \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public void testParseWithEmptyLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" assertEquals(ParseInfo.EMPTY, PARSER.parse(\"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" assertEquals(ParseInfo.EMPTY, PARSER.parse(\" \"));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public void testParseWithUnknownCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" assertEquals(CommandType.UNKNOWN, PARSER.parse(\"unknown hi this is unknown\").getCommandType());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" public void testParseWithNoArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" \"\",","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" PARSER.parse(\"todo /option1 this /other other option!\").getArgument()","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public void testParseWithOptions() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" PARSER.parse(\"todo /a this is a /b b /c hello! / this should be together\").getOptions();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e expected \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" expected.put(\"a\", \"this is a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" expected.put(\"b\", \"b\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" expected.put(\"c\", \"hello! / this should be together\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" for (var entry : expected.entrySet()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" assertTrue(options.containsKey(entry.getKey()));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" assertEquals(entry.getValue(), options.getOrDefault(entry.getKey(), \"invalid\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" public void testParseWithoutOptions() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" ParseInfo info \u003d PARSER.parse(\"todo this is a todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" assertEquals(CommandType.ADD_TODO, info.getCommandType());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" assertEquals(\"this is a todo\", info.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" assertEquals(0, info.getOptions().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":55}},{"path":"src/test/java/cyrus/storage/FileStorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import java.lang.reflect.Modifier;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"import cyrus.adapters.LocalDateAdapter;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"public class FileStorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" public void testEmptyFilePath() {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" Assertions.assertThrows(AssertionError.class, () -\u003e new FileStorage(\" \"));","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" Assertions.assertThrows(AssertionError.class, () -\u003e new FileStorage(\"\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" public void testLoadFileCreation() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" assertTrue(testFile.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" public void testLoadFileCreationNested() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/nested/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/nested/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" assertTrue(testFile.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" public void testLoadEmptyFile() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" var tasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" assertEquals(0, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" public void testLoadWithValidData() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" var formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" tasks.add(new ToDo(\"todo task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" tasks.add(new Deadline(\"deadline task\", LocalDate.parse(\"16/08/2023\", formatter)));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" tasks.add(","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" new Event(","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" \"event task\",","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" LocalDate.parse(\"16/08/2023\", formatter),","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" LocalDate.parse(\"19/09/2023\", formatter)","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" var gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" .excludeFieldsWithModifiers(Modifier.TRANSIENT)","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" .create();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(\"test_data/test.json\"))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":" gson.toJson(tasks, bw);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e retrievedTasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" for (int i \u003d 0; i \u003c retrievedTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" assertEquals(tasks.get(i).toString(), retrievedTasks.get(i).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" public void testLoadWithInvalidData() throws IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" var gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" .excludeFieldsWithModifiers(Modifier.TRANSIENT)","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" .create();","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" List\u003cMalformedData\u003e malformed \u003d Arrays.asList(","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" new MalformedData(\"Peter\"),","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" new MalformedData(\"Bad\")","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(\"test_data/test.json\"))) {","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" gson.toJson(malformed, bw);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":" FileStorage fs \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" assertThrows(AssertionError.class, fs::load);","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" private static class MalformedData {","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" private final String name;","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":" public MalformedData(String name) {","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":138}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"hi","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"todo new task!","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"mark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"unmark 0","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"mark 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08 2023 /to Tomorrow","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08/2023 /to Tomorrow","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08/2023","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08/2023 /to 13/08/2023","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":14}},{"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":"woojiahao"},"content":"REM run the program, feed cyrus.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"java -classpath ..\\bin cyrus.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":{"woojiahao":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":"woojiahao"},"content":"# Change to root directory to compile the jar","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"cd ../","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"if ! ./gradlew shadowJar","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"# Temporarily move the existing save file to another name so that we can test and tear down","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"mv data/data.json data/backup.json","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"# run the program, feed cyrus.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"# Execute the jar instead","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"# Must run the jar from root directory","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"java -jar build/libs/cyrus.jar \u003c text-ui-test/input.txt \u003e text-ui-test/ACTUAL.txt","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"cd text-ui-test/","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"# Once done with test, restore original data file","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"rm ../data/data.json","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"mv ../data/backup.json ../data/data.json","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"woojiahao":17,"-":35}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"# Cyrus","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003e Worry no more about your tasks!","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"**Cyrus** is a hassle free task list manager built with [Java.](https://www.java.com/en/)","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"## Core features","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"* Add events","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"* Add deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"* Add regular todos","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"* Mark/unmark tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"* Delete tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"* Save tasks to file","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"## Building","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"To get started with `Cyrus`, you can use the following steps:","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"1. Clone the repository","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"git clone https://github.com/woojiahao/ip","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"```","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"2. Change to corresponding directory","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"cd ip/","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"3. Build the project","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"./gradlew shadowJar","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"4. Run the built jar","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"```bash","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"java -jar build/libs/cyrus.jar","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"```","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":"## Pending features","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":"- [ ] GUI for interaction","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"woojiahao":40,"-":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":"woojiahao"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-03"},{"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":"woojiahao"},"content":" implementation group: \u0027com.google.code.gson\u0027, name: \u0027gson\u0027, version: \u00272.10.1\u0027","lastModifiedDate":"2023-08-29"},{"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":"woojiahao"},"content":" mainClass.set(\"cyrus.Launcher\")","lastModifiedDate":"2023-09-04"},{"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":"woojiahao"},"content":" archiveBaseName \u003d \"cyrus\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"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"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" version \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" modules \u003d [\u0027javafx.base\u0027, \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027]","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"sourceSets {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" main {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" resources {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" srcDirs \"src/main/resources\"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":"processResources {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" duplicatesStrategy \u003d DuplicatesStrategy.EXCLUDE","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":26,"-":40}},{"path":"src/main/java/cyrus/Cyrus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandError;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import cyrus.storage.FileStorage;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import cyrus.storage.IStorage;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * Entry point of Cyrus interface.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"public class Cyrus {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" private final IStorage storage \u003d new FileStorage(\"data/data.json\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" private final TaskList taskList \u003d new TaskList(storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private final Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" * Parses input into {@code ParseInfo}.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * @param input user input to parse.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * @return parsed user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" public ParseInfo parseInput(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" return parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" * Executes a given command given the {@code ParseInfo}.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo parsed information of the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" * @return {@code String} output of command if successfully executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if there is an error with the input.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" public String dispatchAndExecute(ParseInfo parseInfo) throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" Command command \u003d parser.dispatchCommand(taskList, parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" String[] lines \u003d command.execute();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e text \u003d","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" Arrays.stream(lines)","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" .flatMap((line) -\u003e Stream.of(line.split(\"\\n\")))","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" return String.join(\"\\n\", text);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" return taskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":55}},{"path":"src/main/java/cyrus/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.ui.CyrusChat;","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Launcher for Cyrus Gui.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" Application.launch(CyrusChat.class, args);","lastModifiedDate":"2023-09-18"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"woojiahao":14}},{"path":"src/main/java/cyrus/adapters/LocalDateAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.adapters;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.TypeAdapter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.stream.JsonReader;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.stream.JsonWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * GSON adapter to properly handle {@code LocalDate} values in the various {@code Task}.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class LocalDateAdapter extends TypeAdapter\u003cLocalDate\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * Converts {@code LocalDateAdapter} to the input format of {@code dd/MM/yyyy} when writing to JSON.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * @param jsonWriter writes the value to the JSON.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * @param localDate the Java object to write. May be null.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * @throws IOException if {@code jsonWriter} encounters an error with writing.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" public void write(JsonWriter jsonWriter, LocalDate localDate) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" jsonWriter.value(DateUtility.toInputFormat(localDate));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * Deserializes {@code LocalDate} to the same input format as {@code dd/MM/yyyy}.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param jsonReader reads the value from JSON.","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @return {@code LocalDate} value.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * @throws IOException if {@code jsonReader} encounters error with reading.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" public LocalDate read(JsonReader jsonReader) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" String input \u003d jsonReader.nextString();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" return DateUtility.parse(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":40}},{"path":"src/main/java/cyrus/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * Command to add a {@code Deadline} to the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public AddDeadlineCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * To add a {@code Deadline}, must ensure that the deadline has an argument (i.e. name of the","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * deadline) and it contains the {@code by} option which corresponds to a valid {@code","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * LocalDate} format which is {@code dd/MM/yyyy}.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no arguments are present, no {@code by} option is provided, or date","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" * format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Deadline is missing a body!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d this.parseInfo.getOptions();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" if (!options.containsKey(\"by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid deadline format: missing /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" String deadlineName \u003d this.parseInfo.getArgument();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" String deadlineBy \u003d this.parseInfo.getOptions().get(\"by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" LocalDate deadlineDate \u003d DateUtility.parse(deadlineBy);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid deadline format: invalid by string, must be format dd/MM/yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" Task deadline \u003d new Deadline(deadlineName, deadlineDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" this.taskList.addTask(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" deadline.toString(),","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":54}},{"path":"src/main/java/cyrus/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * Command to add an {@code Event} to the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public AddEventCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * To add an {@code Event}, must ensure that the event has an argument (i.e. name of the","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * deadline) and it contains a {@code from} and {@code to} option which corresponds to a valid","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * {@code LocalDate} format which is {@code dd/MM/yyyy}.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no arguments are present, no {@code from} or {@code to} option is","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" * provided, or date formats are invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Event is missing a body!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d this.parseInfo.getOptions();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" if (!options.containsKey(\"from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: missing /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" if (!options.containsKey(\"to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: missing /to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" String eventName \u003d this.parseInfo.getArgument();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" String eventFrom \u003d options.get(\"from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" String eventTo \u003d options.get(\"to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" LocalDate eventFromDate \u003d DateUtility.parse(eventFrom);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" LocalDate eventToDate \u003d DateUtility.parse(eventTo);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" if (eventFromDate \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: invalid from string, must be format dd/MM/yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" if (eventToDate \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid event format: invalid to string, must be format dd/MM/yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" Task event \u003d new Event(eventName, eventFromDate, eventToDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" this.taskList.addTask(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" event.toString(),","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":65}},{"path":"src/main/java/cyrus/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.ToDo;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Command to add a {@code ToDo} to the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public AddTodoCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" * To add a {@code ToDo}, must ensure that the todo has an argument (i.e. name of the","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * deadline).","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no arguments are present.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"ToDo is missing a body!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" String content \u003d String.join(\" \", this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" ToDo todo \u003d new ToDo(content);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.taskList.addTask(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" todo.toString(),","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":35}},{"path":"src/main/java/cyrus/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to exit the program.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public ByeCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" \"Bye. Hope to see you again!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":20}},{"path":"src/main/java/cyrus/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Represents a general command to operate on a {@code TaskList} and a given {@code ParseInfo}","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * {@code TaskList} made {@code protected final} since sub-classes should be able to access it.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" protected final TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * {@code ParseInfo} made {@code protected final} since sub-classes should be able to access it.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" protected final ParseInfo parseInfo;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * Base constructor for a type of command.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param taskList {@code TaskList} with available tasks to operate on.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo parsed information from {@code Parser}.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" public Command(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" this.parseInfo \u003d parseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * Executes behavior of command that operates on the given {@code TaskList} and {@code ParseInfo}.","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if there is a validation error with the {@code ParseInfo}","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public abstract String[] execute() throws CommandError;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":36}},{"path":"src/main/java/cyrus/commands/CommandError.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":" * Custom error that occurs when a {@code Command} executes.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":" * \u003cp\u003eOften occurs when the input is parsed wrongly.\u003c/p\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"public class CommandError extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" public CommandError(String reason) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" super(reason);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":12}},{"path":"src/main/java/cyrus/commands/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":" * Types of commands available to the bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" ADD_TODO,","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" ADD_EVENT,","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" ADD_DEADLINE,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" BYE,","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" FIND_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" DELETE_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" LIST_TASKS,","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" MARK_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" VIEW_STATISTICS,","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" UNMARK_TASK,","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" UNKNOWN;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * Maps a {@code String} input to a {@code CommandType}.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param input input to map","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * @return mapped {@code CommandType}","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" public static CommandType fromString(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" switch (input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" return BYE;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" return ADD_TODO;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" return ADD_EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" return ADD_DEADLINE;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" return DELETE_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" return LIST_TASKS;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" return MARK_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" return UNMARK_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" return FIND_TASK;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" case \"statistics\":","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" return VIEW_STATISTICS;","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" return UNKNOWN;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":51}},{"path":"src/main/java/cyrus/commands/DeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Command to delete a {@code Task} from the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class DeleteTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public DeleteTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" * Deletes the {@code Task} corresponding to the command\u0027s argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no argument is present or if the value given is out of index or not","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * a number.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Missing task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" int i \u003d Integer.parseInt(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" Task task \u003d this.taskList.getTask(i - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" this.taskList.removeTask(i - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" \"Noted. I\u0027ve removed this task:\",","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" task.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" String.format(\"Now you have %d cyrus.tasks in the list.\", this.taskList.size())","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: must be integer\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: index out of bounds\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":41}},{"path":"src/main/java/cyrus/commands/FindTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * Command to find {@code Task} given keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"public class FindTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" public FindTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * Returns list of matching tasks given keyword, taken from argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" var tasks \u003d this.taskList.findTask(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" \"No tasks found.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" lines.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" for (var task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" lines.add(task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" return lines.toArray(String[]::new);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":35}},{"path":"src/main/java/cyrus/commands/ListTasksCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to list out the {@code Task} within the {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class ListTasksCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public ListTasksCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Print the string representation of the {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" public String[] execute() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" this.taskList.toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":23}},{"path":"src/main/java/cyrus/commands/MarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to mark a {@code Task} in the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class MarkTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public MarkTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Marks the {@code Task} corresponding to the command\u0027s argument as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no argument is present or if the value given is out of bounds or not","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * a number.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Missing task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" int i \u003d Integer.parseInt(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.taskList.markTask(i - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \"Nice! I\u0027ve marked this task as done:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" this.taskList.getTask(i - 1).toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: must be integer\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: index out of bounds\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":39}},{"path":"src/main/java/cyrus/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to represent when an invalid command is provided.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public UnknownCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Relies on the thrown {@code CommandError}.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError by default","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"I\u0027m sorry, I don\u0027t know what that means :(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":23}},{"path":"src/main/java/cyrus/commands/UnmarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to unmark a {@code Task} in the given {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class UnmarkTaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" public UnmarkTaskCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Marks the {@code Task} corresponding to the command\u0027s argument as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @throws CommandError if no argument is present or if the value given is out of bounds or not","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * a number.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" if (this.parseInfo.hasNoArgument()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Missing task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" int i \u003d Integer.parseInt(this.parseInfo.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.taskList.unmarkTask(i - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \"OK, I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" this.taskList.getTask(i - 1).toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: must be integer\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"Invalid task index: index out of bounds\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":39}},{"path":"src/main/java/cyrus/commands/ViewStatisticsCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" * Command to view user statistics of task completion.","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class ViewStatisticsCommand extends Command {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * Base constructor for a type of command.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * @param taskList {@code TaskList} with available tasks to operate on.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo parsed information from {@code Parser}.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public ViewStatisticsCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" super(taskList, parseInfo);","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" public String[] execute() throws CommandError {","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" if (this.taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" throw new CommandError(\"You do not have any tasks to view the statistics of!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" return new String[]{","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" \"Pulling up your latest statistics!\",","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"woojiahao":30}},{"path":"src/main/java/cyrus/parser/ParseInfo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Packet of information about the parsing response.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * \u003cp\u003eModelled after CLI applications where the {@code argument} is the text before any options","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * and an {@code option} is the values of \"flags\".\u003c/p\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"public class ParseInfo {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Defaults {@code ParseInfo} for an empty command.","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" public static final ParseInfo EMPTY \u003d new ParseInfo(","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" CommandType.UNKNOWN,","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" \"\",","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" new HashMap\u003c\u003e()","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private final CommandType commandType;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" private final String argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" private final HashMap\u003cString, String\u003e options;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * Constructor for {@code Parser} parsed data.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" * @param commandType type of command parsed.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param argument value of command outside of options.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @param options key-value pairs associated with command.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" public ParseInfo(CommandType commandType, String argument, HashMap\u003cString, String\u003e options) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" this.argument \u003d argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" this.options \u003d options;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" * Returns if parsed command has no argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" * @return true if parsed command has no arguments","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" public boolean hasNoArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" return this.argument.equals(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" * Returns {@code argument} of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" * @return argument of command","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" public String getArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" return this.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" * Creates a copy of the options to avoid accidentally modifying the current options map.","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" * @return Copy of options hashmap.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public HashMap\u003cString, String\u003e getOptions() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" return new HashMap\u003c\u003e(this.options);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" * Returns {@code commandType} of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" * @return command type","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" public CommandType getCommandType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" return this.commandType;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":75}},{"path":"src/main/java/cyrus/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.AddTodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.ByeCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.DeleteTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.FindTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.ListTasksCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.MarkTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.UnknownCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.UnmarkTaskCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.ViewStatisticsCommand;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * Parses user input into a command format. See {@code ParseInfo} for more information about the","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" * parsed form.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * Character(s) that come before an option is given.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" private static final String OPTION_LEAD \u003d \"/\";","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * Dispatches {@code Command} given a {@code taskList} and {@code parseInfo} about the incoming","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" * string command.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" * @param taskList {@code TaskList} of tasks to provide to the command when running","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" * @param parseInfo {@code ParseInfo} parsed from command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" * @return appropriate {@code Command}","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" public Command dispatchCommand(TaskList taskList, ParseInfo parseInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" switch (parseInfo.getCommandType()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" case ADD_TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" return new AddTodoCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" case ADD_EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" return new AddEventCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" case ADD_DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" return new AddDeadlineCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" case BYE:","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" return new ByeCommand(taskList, parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" case FIND_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" return new FindTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" case DELETE_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" return new DeleteTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" case LIST_TASKS:","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" return new ListTasksCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" case MARK_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" return new MarkTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" case UNMARK_TASK:","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" return new UnmarkTaskCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" case VIEW_STATISTICS:","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" return new ViewStatisticsCommand(taskList, parseInfo);","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" return new UnknownCommand(taskList, parseInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" * Performs simple parsing on the user input where we read tokens in while no /[word] is","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" * encountered.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" * @param line Line to parse.","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" public ParseInfo parse(String line) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" String input \u003d line.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" if (input.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" return ParseInfo.EMPTY;","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" String[] parts \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e argumentParts \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" // Parse the argument first","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" while (i \u003c parts.length) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" if (isPartValidOption(parts[i])) {","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" argumentParts.add(parts[i++]);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" String argument \u003d String.join(\" \", argumentParts);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" while (i \u003c parts.length) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" String key \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e acc \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" if (isPartValidOption(parts[i])) {","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" key \u003d parts[i].substring(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" while (++i \u003c parts.length \u0026\u0026 !(isPartValidOption(parts[i]))) {","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" acc.add(parts[i]);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" options.put(key, String.join(\" \", acc));","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" return new ParseInfo(CommandType.fromString(parts[0]), argument, options);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" private boolean isPartValidOption(String part) {","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" return part.startsWith(OPTION_LEAD) \u0026\u0026 part.length() !\u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":113}},{"path":"src/main/java/cyrus/storage/FileStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static java.lang.Boolean.parseBoolean;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import java.lang.reflect.Modifier;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.reflect.TypeToken;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"import cyrus.adapters.LocalDateAdapter;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * Storage of task list using JSON files.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"public class FileStorage implements IStorage {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" private static final Gson GSON \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" new GsonBuilder()","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" .excludeFieldsWithModifiers(Modifier.TRANSIENT)","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" .setPrettyPrinting()","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" .create();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" private final String dataFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" * Constructs {@code FileStorage} instance given file path to read and write to.","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" * @param dataFilePath file path to read/write data to/from.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" public FileStorage(String dataFilePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" assert !dataFilePath.trim().equals(\"\") : \"Data file path cannot be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" this.dataFilePath \u003d dataFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" * Loads a list of {@code Task} from a file, determined by {@code dataFilePath}.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" * @return list of {@code Task} from file.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" * @throws AssertionError if task format is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" // TODO: Figure out a better way to handle file IO errors in the code","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" // Potentially just delete and re-create a blank file (but that means any existing data is","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" // immediately lost)","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" Type listType \u003d new TypeToken\u003cList\u003cHashMap\u003cString, String\u003e\u003e\u003e() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" }.getType();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" List\u003cHashMap\u003cString, String\u003e\u003e jsonTasks \u003d GSON.fromJson(br, listType);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e fileTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" if (jsonTasks \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" for (HashMap\u003cString, String\u003e entry : jsonTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" enforceFields(entry);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" String type \u003d entry.get(\"type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" task \u003d parseToDo(entry);","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" task \u003d parseDeadline(entry);","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" task \u003d parseEvent(entry);","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid task type found in data.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" fillFields(task, entry);","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" fileTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" return fileTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" createDataFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" System.out.println(\"Failed to read cyrus.tasks from data file\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" * Saves a list of tasks into a JSON file.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" * @param tasks list of tasks to save","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" public void save(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" GSON.toJson(tasks, bw);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" System.out.println(\"Failed to save cyrus.tasks to data file\");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" private void createDataFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" File file \u003d new File(dataFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" } catch (IOException ne) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":" System.out.println(\"Unable to create file, Cyrus cannot run\");","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" private ToDo parseToDo(HashMap\u003cString, String\u003e entry) {","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":" return new ToDo(entry.get(\"name\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" private Deadline parseDeadline(HashMap\u003cString, String\u003e entry) {","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" LocalDate deadlineDate \u003d DateUtility.parse(entry.get(\"due\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-18"},{"lineNumber":139,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid deadline format\");","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"woojiahao"},"content":" return new Deadline(entry.get(\"name\"), deadlineDate);","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":143,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":144,"author":{"gitId":"woojiahao"},"content":" private Event parseEvent(HashMap\u003cString, String\u003e entry) {","lastModifiedDate":"2023-09-18"},{"lineNumber":145,"author":{"gitId":"woojiahao"},"content":" LocalDate fromDate \u003d DateUtility.parse(entry.get(\"from\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":146,"author":{"gitId":"woojiahao"},"content":" LocalDate toDate \u003d DateUtility.parse(entry.get(\"to\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":147,"author":{"gitId":"woojiahao"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-09-18"},{"lineNumber":148,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid from/to format\");","lastModifiedDate":"2023-09-18"},{"lineNumber":149,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":150,"author":{"gitId":"woojiahao"},"content":" return new Event(entry.get(\"name\"), fromDate, toDate);","lastModifiedDate":"2023-09-18"},{"lineNumber":151,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":152,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":153,"author":{"gitId":"woojiahao"},"content":" private void fillFields(Task task, HashMap\u003cString, String\u003e entry) {","lastModifiedDate":"2023-09-18"},{"lineNumber":154,"author":{"gitId":"woojiahao"},"content":" task.setDone(parseBoolean(entry.get(\"status\")));","lastModifiedDate":"2023-09-18"},{"lineNumber":155,"author":{"gitId":"woojiahao"},"content":" if (entry.containsKey(\"completed_date\")) {","lastModifiedDate":"2023-09-18"},{"lineNumber":156,"author":{"gitId":"woojiahao"},"content":" LocalDate completedDate \u003d DateUtility.parse(entry.get(\"completed_date\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":157,"author":{"gitId":"woojiahao"},"content":" if (completedDate \u003d\u003d null) {","lastModifiedDate":"2023-09-18"},{"lineNumber":158,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(\"Invalid completed date format\");","lastModifiedDate":"2023-09-18"},{"lineNumber":159,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":160,"author":{"gitId":"woojiahao"},"content":" task.setCompletedDate(completedDate);","lastModifiedDate":"2023-09-18"},{"lineNumber":161,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":162,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":163,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":164,"author":{"gitId":"woojiahao"},"content":" private void enforceFields(HashMap\u003cString, String\u003e map) {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"woojiahao"},"content":" String[] mandatoryKeys \u003d {\"type\", \"status\", \"name\"};","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"woojiahao"},"content":" Consumer\u003cString[]\u003e checkKeys \u003d (keys) -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"woojiahao"},"content":" for (String key : keys) {","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"woojiahao"},"content":" if (!map.containsKey(key)) {","lastModifiedDate":"2023-09-18"},{"lineNumber":169,"author":{"gitId":"woojiahao"},"content":" throw new IllegalStateException(","lastModifiedDate":"2023-09-18"},{"lineNumber":170,"author":{"gitId":"woojiahao"},"content":" String.format(\"All entries in data.json must contain \\\"%s\\\" field\", key)","lastModifiedDate":"2023-09-18"},{"lineNumber":171,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":172,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":173,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"woojiahao"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"woojiahao"},"content":" checkKeys.accept(mandatoryKeys);","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"woojiahao"},"content":" String type \u003d map.get(\"type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"woojiahao"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"woojiahao"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"woojiahao"},"content":" checkKeys.accept(new String[]{\"due\"});","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"woojiahao"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"woojiahao"},"content":" checkKeys.accept(new String[]{\"from\", \"to\"});","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"woojiahao"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"woojiahao"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":190}},{"path":"src/main/java/cyrus/storage/IStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Interface to allow different types of storage to be used.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public interface IStorage {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e load();","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" void save(List\u003cTask\u003e tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":14}},{"path":"src/main/java/cyrus/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * Deadline task that contains the name of the deadline and the due date (i.e. {@code deadline}.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"type\")","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" private static final String TYPE \u003d \"deadline\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"due\")","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * Create Deadline with name and deadline date.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * @param name name of deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param deadline date of deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" public Deadline(String name, LocalDate deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" return String.format(\"[D] %s (by: %s)\", super.toString(), DateUtility.formatLocalDate(this.deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":33}},{"path":"src/main/java/cyrus/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" * Event task that contains the name of the event as well as when the event starts (i.e. {@code","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" * from}) and ends (i.e. {@code to}).","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"type\")","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" private static final String TYPE \u003d \"event\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * Create Event with name and event to and from dates.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" * @param name name of deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" * @param from date event starts from.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" * @param to date event lasts to.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" \"[E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" DateUtility.formatLocalDate(this.from),","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" DateUtility.formatLocalDate(this.to)","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":42}},{"path":"src/main/java/cyrus/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Represents general task stored within the {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public final String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"status\")","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"completed_date\")","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" private LocalDate completedDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * Base constructor to set Task name.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" * @param name name of Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" * Set {@code done} value.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * @param done value to set to","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" public void setDone(boolean done) {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public void setCompletedDate(LocalDate completedDate) {","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" this.completedDate \u003d completedDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" * Returns the value of {@code isDone}.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" * @return {@code isDone} value.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" return isDone;","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" * Returns the date completed of task.","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" * @return {@code completedDate} value.","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" public LocalDate getCompletedDate() {","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" return completedDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" * Custom string representation of {@code Task}.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" * @return string representation of {@code Task}","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.name);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":66}},{"path":"src/main/java/cyrus/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.IntStream;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import cyrus.storage.IStorage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" * Wrapper around the list of {@code Task}.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private final IStorage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" * Create TaskList with given {@code Storage} mechanism.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" * @param storage {@code IStorage} mechanism to store task list after every action.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" public TaskList(IStorage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * Adds task and saves to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param task {@code Task} to add","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" this.saveTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" * Removes task by index and saves tto file.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" * @param index index position of task to remove","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" this.saveTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" * Marks given task at {@code index} as done, updating the completed date to be the latest time if not previously","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" * already completed.","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" * @param index index of task to mark as completed.","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" var task \u003d tasks.get(index);","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" if (task.getIsDone()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" // If already done, do nothing","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" task.setDone(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" task.setCompletedDate(LocalDate.now());","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" saveTasks();","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" * Unmarks given task at {@code index} as not done, updating the completed date to be null.","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" * @param index index of task to mark as incompleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" var task \u003d tasks.get(index);","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" task.setDone(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" task.setCompletedDate(null);","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" saveTasks();","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":" * Finds {@code Task} whose name matches the given {@code keyword}.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" * @param keyword keyword to find task.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" * @return all tasks that match the {@code keyword}.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" public List\u003cTask\u003e findTask(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" return this.tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" .stream()","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" .filter(task -\u003e task.name.contains(keyword))","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" * Get size of current {@code TaskList}.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" * @return size of {@code TaskList}","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" * Get {@code Task} given {@code index}.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" * @param index index position of task to update","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" * @return {@code Task} corresponding to the {@code index}","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" * Generates the task distribution across the three types of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" * @return {@code HashMap} of task name to count.","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" public HashMap\u003cString, Long\u003e getTaskDistribution() {","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, Long\u003e distribution \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" long todoCount \u003d tasks.stream().filter(task -\u003e task instanceof ToDo).count();","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":" long deadlineCount \u003d tasks.stream().filter(task -\u003e task instanceof Deadline).count();","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" long eventCount \u003d tasks.stream().filter(task -\u003e task instanceof Event).count();","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" distribution.put(\"To-Do\", todoCount);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" distribution.put(\"Deadline\", deadlineCount);","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" distribution.put(\"Event\", eventCount);","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" return distribution;","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":" * Generates the latest week\u0027s task distribution.","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" * @return {@code HashMap} of date to count.","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" public HashMap\u003cLocalDate, Long\u003e getWeeklyTaskCompletionRate() {","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cLocalDate, Long\u003e distribution \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":" LocalDate earliestDate \u003d LocalDate.now().minusDays(7);","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e filteredTasks \u003d tasks.stream()","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" .filter(task -\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" task.getCompletedDate() !\u003d null","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":" \u0026\u0026 (task.getCompletedDate().isEqual(earliestDate)","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"woojiahao"},"content":" || task.getCompletedDate().isAfter(earliestDate)))","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"woojiahao"},"content":" for (var task : filteredTasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"woojiahao"},"content":" long value \u003d distribution.getOrDefault(task.getCompletedDate(), 0L);","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"woojiahao"},"content":" distribution.put(task.getCompletedDate(), value + 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"woojiahao"},"content":" return distribution;","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"woojiahao"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"woojiahao"},"content":" return \"You do not have any tasks, use todo, deadline, or event to add new ones!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"woojiahao"},"content":" List\u003cString\u003e formattedTasks \u003d IntStream","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"woojiahao"},"content":" .range(0, tasks.size())","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"woojiahao"},"content":" .mapToObj((j) -\u003e String.format(\"%d. %s\", j + 1, this.tasks.get(j)))","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"woojiahao"},"content":" formattedTasks.add(0, \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"woojiahao"},"content":" return String.join(\"\\n\", formattedTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"woojiahao"},"content":" * Helper function to save the current list of tasks to the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"woojiahao"},"content":" private void saveTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"woojiahao"},"content":" this.storage.save(this.tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":168}},{"path":"src/main/java/cyrus/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":" * To-Do task that only includes the name of the task to complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" @SerializedName(\"type\")","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" private static final String TYPE \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" return String.format(\"[T] %s\", super.toString());","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":20}},{"path":"src/main/java/cyrus/ui/CyrusChat.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import cyrus.Cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" * Entry point for initializing and loading the MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"public class CyrusChat extends Application {","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" private static final Cyrus CYRUS \u003d new Cyrus();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" public void start(Stage primaryStage) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(CyrusChat.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" scene.getStylesheets().add(this.getClass().getResource(\"/style/styles.css\").toExternalForm());","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" primaryStage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" primaryStage.setResizable(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setCyrus(CYRUS);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" primaryStage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":33}},{"path":"src/main/java/cyrus/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Dialog box to display bot/user text.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"public class DialogBox extends VBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" private HBox userInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private Label username;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" * Constructor to create a DialogBox dynamically.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" * @param text text to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" * @param user username of person sending the message.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @param img image to display for the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" public DialogBox(String text, String user, Image img, Color color) {","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" username.setText(user);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" dialog.getStyleClass().add(user);","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" dialog.setTextFill(color);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" public static DialogBox getDialog(String text, String user, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" return new DialogBox(text, user, img, Color.BLACK);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" public static DialogBox getDialog(String text, String user, Image img, Color color) {","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" return new DialogBox(text, user, img, color);","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"woojiahao":58}},{"path":"src/main/java/cyrus/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import java.util.Timer;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import cyrus.Cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandError;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import cyrus.parser.ParseInfo;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import cyrus.utility.DateUtility;","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.PieChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.XYChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"import javafx.stage.Modality;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" * Entry point for Cyrus Gui.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" private static final String USER_TITLE \u003d \"User\";","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" private static final String BOT_TITLE \u003d \"Cyrus\";","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" private final Image userImage \u003d new Image(","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaUser.png\"))","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" private final Image botImage \u003d new Image(","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"))","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" private Cyrus cyrus;","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" * Initializes MainWindow component.","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" DialogBox.getDialog(","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" \"Welcome to Cyrus!\\nYou can use /list, /todo, /deadline, /event to get started!\",","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" BOT_TITLE,","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" botImage,","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" Color.rgb(184, 110, 240)","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" )","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" public void setCyrus(Cyrus d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" cyrus \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"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":82,"author":{"gitId":"woojiahao"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":" ParseInfo parseInfo \u003d cyrus.parseInput(userText);","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" if (parseInfo.equals(ParseInfo.EMPTY)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":" putConversation(userText, \"Missing input!\", true);","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":" String cyrusResponse \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" boolean isError \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" cyrusResponse \u003d cyrus.dispatchAndExecute(parseInfo);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" } catch (CommandError e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" cyrusResponse \u003d e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":" isError \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" } finally {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" putConversation(userText, cyrusResponse, isError);","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":" if (parseInfo.getCommandType().equals(CommandType.VIEW_STATISTICS)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" // Open the statistics dashboard","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" openStatisticsDashboard();","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" if (parseInfo.getCommandType() \u003d\u003d CommandType.BYE) {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" Timer timer \u003d new Timer();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":" timer.schedule(new TimerTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" System.exit(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" }, 1000);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" private void putConversation(String userText, String cyrusText, boolean isError) {","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" DialogBox.getDialog(userText, USER_TITLE, userImage),","lastModifiedDate":"2023-09-18"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" DialogBox.getDialog(cyrusText, BOT_TITLE, botImage, isError ? Color.rgb(245, 66, 111) : Color.BLACK)","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" private void openStatisticsDashboard() {","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":" var pieChartData \u003d loadTaskDistributionData();","lastModifiedDate":"2023-09-18"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" var lineChartData \u003d loadWeeklyTaskCompletionRate();","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(getClass().getResource(\"/view/StatisticsDashboard.fxml\"));","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" fxmlLoader.setController(new StatisticsDashboard(pieChartData, lineChartData));","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":" VBox window \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":" Scene scene \u003d new Scene(window);","lastModifiedDate":"2023-09-18"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" Stage stage \u003d new Stage();","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" stage.initModality(Modality.APPLICATION_MODAL);","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" stage.setTitle(\"Statistics Dashboard\");","lastModifiedDate":"2023-09-18"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-18"},{"lineNumber":139,"author":{"gitId":"woojiahao"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"woojiahao"},"content":" stage.setAlwaysOnTop(true);","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"woojiahao"},"content":" stage.show();","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-18"},{"lineNumber":143,"author":{"gitId":"woojiahao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-18"},{"lineNumber":144,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":145,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":146,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":147,"author":{"gitId":"woojiahao"},"content":" private ObservableList\u003cPieChart.Data\u003e loadTaskDistributionData() {","lastModifiedDate":"2023-09-18"},{"lineNumber":148,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, Long\u003e tasksDistribution \u003d cyrus.getTaskList().getTaskDistribution();","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"woojiahao"},"content":" var pieChartData \u003d FXCollections.\u003cPieChart.Data\u003eobservableArrayList();","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"woojiahao"},"content":" for (var entry : tasksDistribution.entrySet()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"woojiahao"},"content":" pieChartData.add(new PieChart.Data(entry.getKey(), entry.getValue()));","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":153,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":154,"author":{"gitId":"woojiahao"},"content":" return pieChartData;","lastModifiedDate":"2023-09-18"},{"lineNumber":155,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-18"},{"lineNumber":156,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":157,"author":{"gitId":"woojiahao"},"content":" private XYChart.Series\u003cString, Long\u003e loadWeeklyTaskCompletionRate() {","lastModifiedDate":"2023-09-18"},{"lineNumber":158,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cLocalDate, Long\u003e weeklyTasksCompletedDistribution \u003d cyrus.getTaskList().getWeeklyTaskCompletionRate();","lastModifiedDate":"2023-09-18"},{"lineNumber":159,"author":{"gitId":"woojiahao"},"content":" var lineChartData \u003d new XYChart.Series\u003cString, Long\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":160,"author":{"gitId":"woojiahao"},"content":" for (var entry : weeklyTasksCompletedDistribution.entrySet()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":161,"author":{"gitId":"woojiahao"},"content":" lineChartData.getData().add(","lastModifiedDate":"2023-09-11"},{"lineNumber":162,"author":{"gitId":"woojiahao"},"content":" new XYChart.Data\u003c\u003e(DateUtility.toInputFormat(entry.getKey()), entry.getValue())","lastModifiedDate":"2023-09-11"},{"lineNumber":163,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":164,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":165,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":166,"author":{"gitId":"woojiahao"},"content":" if (weeklyTasksCompletedDistribution.size() \u003e 0) {","lastModifiedDate":"2023-09-11"},{"lineNumber":167,"author":{"gitId":"woojiahao"},"content":" var sortedEntries \u003d lineChartData","lastModifiedDate":"2023-09-11"},{"lineNumber":168,"author":{"gitId":"woojiahao"},"content":" .getData()","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"woojiahao"},"content":" .stream()","lastModifiedDate":"2023-09-11"},{"lineNumber":170,"author":{"gitId":"woojiahao"},"content":" .sorted(Comparator.comparing(XYChart.Data::getXValue))","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"woojiahao"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":172,"author":{"gitId":"woojiahao"},"content":" lineChartData.setData(FXCollections.observableArrayList(sortedEntries));","lastModifiedDate":"2023-09-11"},{"lineNumber":173,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":174,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":175,"author":{"gitId":"woojiahao"},"content":" return lineChartData;","lastModifiedDate":"2023-09-18"},{"lineNumber":176,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":177}},{"path":"src/main/java/cyrus/ui/StatisticsDashboard.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.ui;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.net.URL;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.util.ResourceBundle;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import javafx.fxml.Initializable;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.LineChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.PieChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.chart.XYChart;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Popup to view statistics of the use of the task list.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"public class StatisticsDashboard extends VBox implements Initializable {","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" private PieChart taskDistributionChart;","lastModifiedDate":"2023-09-18"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" private LineChart\u003cString, Long\u003e weeklyTaskCompletionRateChart;","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" private final ObservableList\u003cPieChart.Data\u003e taskDistributionData;","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" private final XYChart.Series\u003cString, Long\u003e weeklyTaskCompletionRateData;","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" * Empty constructor.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" public StatisticsDashboard() {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" this(null, null);","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" * Constructor for creating a StatisticsDashboard controller.","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" public StatisticsDashboard(","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" ObservableList\u003cPieChart.Data\u003e taskDistributionData,","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" XYChart.Series\u003cString, Long\u003e weeklyTaskCompletionRateData","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" ) {","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" this.taskDistributionData \u003d taskDistributionData;","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" this.weeklyTaskCompletionRateData \u003d weeklyTaskCompletionRateData;","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" public void initialize(URL location, ResourceBundle resources) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" taskDistributionChart.setData(taskDistributionData);","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" weeklyTaskCompletionRateChart.getData().add(weeklyTaskCompletionRateData);","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"woojiahao":49}},{"path":"src/main/java/cyrus/utility/DateUtility.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.utility;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":" * Utility to deal with {@code LocalDate}.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"public class DateUtility {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" private static final DateTimeFormatter INPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" private static final DateTimeFormatter OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" * Parse a string into a {@code LocalDate} of format {@code dd/MM/yyyy}.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" * @param str string to parse","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" * @return {@code LocalDate} if the string is of valid format, else {@code null}","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" public static LocalDate parse(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" return LocalDate.parse(str, INPUT_FORMATTER);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" * Formats {@code LocalDate} to output format of {@code dd MMMM yyyy} such as {@code 15","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" * September 2024}.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" * @param ld {@code LocalDate} to format","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" * @return date formatted in {@code dd MMMM yyyy}","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public static String formatLocalDate(LocalDate ld) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" return ld.format(OUTPUT_FORMATTER);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" * Formats {@code LocalDate} to output format of {@code dd/MM/yyyy} such as {@code 15/09/2024}.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" * @param ld {@code LocalDate} to format","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" * @return date formatted in {@code dd/MM/yyyy}","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" public static String toInputFormat(LocalDate ld) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" if (ld \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" return null;","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" return ld.format(INPUT_FORMATTER);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"woojiahao":51}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" type\u003d\"javafx.scene.layout.VBox\" xmlns\u003d\"http://javafx.com/javafx/17.0.2-ea\"","lastModifiedDate":"2023-09-18"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" \u003cHBox fx:id\u003d\"userInfo\" prefWidth\u003d\"200.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"25.0\" fitWidth\u003d\"25.0\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" \u003cRegion prefWidth\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" \u003cLabel fx:id\u003d\"username\" prefHeight\u003d\"25.0\" prefWidth\u003d\"57.0\" text\u003d\"Username\" wrapText\u003d\"true\" styleClass\u003d\"username\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"13.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" \u003cInsets bottom\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"TOP_RIGHT\" text\u003d\"Label\" wrapText\u003d\"true\" styleClass\u003d\"dialog-text\"/\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":28}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"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.2-ea\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"cyrus.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"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":8,"author":{"gitId":"woojiahao"},"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":9,"author":{"gitId":"woojiahao"},"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":10,"author":{"gitId":"woojiahao"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"woojiahao":12}},{"path":"src/main/resources/view/StatisticsDashboard.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.CategoryAxis?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.LineChart?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.NumberAxis?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.chart.PieChart?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"\u003cVBox prefHeight\u003d\"600.0\" prefWidth\u003d\"1000.0\" xmlns\u003d\"http://javafx.com/javafx/17.0.2-ea\"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" \u003cHBox alignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" \u003cLabel text\u003d\"Usage Statistics\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" \u003cFont name\u003d\"System Font\" size\u003d\"24.0\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" \u003cInsets bottom\u003d\"15.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" \u003cHBox prefHeight\u003d\"545.0\" prefWidth\u003d\"800.0\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" \u003cPieChart fx:id\u003d\"taskDistributionChart\" title\u003d\"Distribution of Tasks\"/\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" \u003cLineChart title\u003d\"Weekly Task Completion Progress\" fx:id\u003d\"weeklyTaskCompletionRateChart\"\u003e","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" \u003cxAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" \u003cCategoryAxis side\u003d\"BOTTOM\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" \u003c/xAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" \u003cyAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" \u003cNumberAxis side\u003d\"LEFT\"/\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" \u003c/yAxis\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" \u003c/LineChart\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"woojiahao":35}},{"path":"src/test/java/cyrus/commands/CommandTypeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"public class CommandTypeTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":" public void testFromString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":" var expected \u003d new HashMap\u003cString, CommandType\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" String[] testStrings \u003d {\"bye\", \"todo\", \"deadline\", \"event\", \"delete\", \"list\", \"mark\", \"unmark\", \"nonsense\"};","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":" expected.put(\"bye\", CommandType.BYE);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" expected.put(\"todo\", CommandType.ADD_TODO);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" expected.put(\"deadline\", CommandType.ADD_DEADLINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" expected.put(\"event\", CommandType.ADD_EVENT);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" expected.put(\"delete\", CommandType.DELETE_TASK);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" expected.put(\"list\", CommandType.LIST_TASKS);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":" expected.put(\"mark\", CommandType.MARK_TASK);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" expected.put(\"unmark\", CommandType.UNMARK_TASK);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" expected.put(\"nonsense\", CommandType.UNKNOWN);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" for (var test : testStrings) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":" assertEquals(expected.get(test), CommandType.fromString(test));","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":28}},{"path":"src/test/java/cyrus/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import cyrus.commands.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":" private static final Parser PARSER \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":" public void testParseWithEmptyLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":" assertEquals(ParseInfo.EMPTY, PARSER.parse(\"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":" assertEquals(ParseInfo.EMPTY, PARSER.parse(\" \"));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":" public void testParseWithUnknownCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":" assertEquals(CommandType.UNKNOWN, PARSER.parse(\"unknown hi this is unknown\").getCommandType());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":" public void testParseWithNoArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":" \"\",","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" PARSER.parse(\"todo /option1 this /other other option!\").getArgument()","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":" public void testParseWithOptions() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e options \u003d","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" PARSER.parse(\"todo /a this is a /b b /c hello! / this should be together\").getOptions();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" HashMap\u003cString, String\u003e expected \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" expected.put(\"a\", \"this is a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" expected.put(\"b\", \"b\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" expected.put(\"c\", \"hello! / this should be together\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" for (var entry : expected.entrySet()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" assertTrue(options.containsKey(entry.getKey()));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":" assertEquals(entry.getValue(), options.getOrDefault(entry.getKey(), \"invalid\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" public void testParseWithoutOptions() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" ParseInfo info \u003d PARSER.parse(\"todo this is a todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" assertEquals(CommandType.ADD_TODO, info.getCommandType());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" assertEquals(\"this is a todo\", info.getArgument());","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":" assertEquals(0, info.getOptions().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":55}},{"path":"src/test/java/cyrus/storage/FileStorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"package cyrus.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"import java.lang.reflect.Modifier;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"woojiahao"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"woojiahao"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"woojiahao"},"content":"import cyrus.adapters.LocalDateAdapter;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"import cyrus.tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"public class FileStorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":" public void testEmptyFilePath() {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":" Assertions.assertThrows(AssertionError.class, () -\u003e new FileStorage(\" \"));","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":" Assertions.assertThrows(AssertionError.class, () -\u003e new FileStorage(\"\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"woojiahao"},"content":" public void testLoadFileCreation() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":" storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":" assertTrue(testFile.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"woojiahao"},"content":" public void testLoadFileCreationNested() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/nested/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"woojiahao"},"content":" storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/nested/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"woojiahao"},"content":" assertTrue(testFile.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"woojiahao"},"content":" public void testLoadEmptyFile() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"woojiahao"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"woojiahao"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"woojiahao"},"content":" var tasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"woojiahao"},"content":" assertEquals(0, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"woojiahao"},"content":" public void testLoadWithValidData() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"woojiahao"},"content":" var formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"woojiahao"},"content":" tasks.add(new ToDo(\"todo task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"woojiahao"},"content":" tasks.add(new Deadline(\"deadline task\", LocalDate.parse(\"16/08/2023\", formatter)));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"woojiahao"},"content":" tasks.add(","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"woojiahao"},"content":" new Event(","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"woojiahao"},"content":" \"event task\",","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"woojiahao"},"content":" LocalDate.parse(\"16/08/2023\", formatter),","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"woojiahao"},"content":" LocalDate.parse(\"19/09/2023\", formatter)","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"woojiahao"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"woojiahao"},"content":" var gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"woojiahao"},"content":" .excludeFieldsWithModifiers(Modifier.TRANSIENT)","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"woojiahao"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"woojiahao"},"content":" .create();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"woojiahao"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"woojiahao"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"woojiahao"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(\"test_data/test.json\"))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"woojiahao"},"content":" gson.toJson(tasks, bw);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"woojiahao"},"content":" FileStorage storage \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"woojiahao"},"content":" List\u003cTask\u003e retrievedTasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"woojiahao"},"content":" for (int i \u003d 0; i \u003c retrievedTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"woojiahao"},"content":" assertEquals(tasks.get(i).toString(), retrievedTasks.get(i).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"woojiahao"},"content":" @Test","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"woojiahao"},"content":" public void testLoadWithInvalidData() throws IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"woojiahao"},"content":" var gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"woojiahao"},"content":" .excludeFieldsWithModifiers(Modifier.TRANSIENT)","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"woojiahao"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"woojiahao"},"content":" .create();","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"woojiahao"},"content":" File testFile \u003d new File(\"test_data/test.json\");","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"woojiahao"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"woojiahao"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"woojiahao"},"content":" List\u003cMalformedData\u003e malformed \u003d Arrays.asList(","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"woojiahao"},"content":" new MalformedData(\"Peter\"),","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"woojiahao"},"content":" new MalformedData(\"Bad\")","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"woojiahao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"woojiahao"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(\"test_data/test.json\"))) {","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"woojiahao"},"content":" gson.toJson(malformed, bw);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"woojiahao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"woojiahao"},"content":" return;","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"woojiahao"},"content":" FileStorage fs \u003d new FileStorage(\"test_data/test.json\");","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"woojiahao"},"content":" assertThrows(IllegalStateException.class, fs::load);","lastModifiedDate":"2023-09-18"},{"lineNumber":127,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"woojiahao"},"content":" testFile.delete();","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"woojiahao"},"content":" private static class MalformedData {","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"woojiahao"},"content":" private final String name;","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"woojiahao"},"content":" public MalformedData(String name) {","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"woojiahao"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"woojiahao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"woojiahao"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"woojiahao":138}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"woojiahao"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"woojiahao"},"content":"hi","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"woojiahao"},"content":"todo new task!","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"woojiahao"},"content":"mark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"woojiahao"},"content":"unmark 0","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"woojiahao"},"content":"mark 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"woojiahao"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08 2023 /to Tomorrow","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08/2023 /to Tomorrow","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08/2023","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"woojiahao"},"content":"event sports meet/gathering /from 12/08/2023 /to 13/08/2023","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"woojiahao"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"woojiahao"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"woojiahao":14}},{"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":"woojiahao"},"content":"REM run the program, feed cyrus.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"woojiahao"},"content":"java -classpath ..\\bin cyrus.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":{"woojiahao":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":"woojiahao"},"content":"# Change to root directory to compile the jar","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"woojiahao"},"content":"cd ../","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"woojiahao"},"content":"if ! ./gradlew shadowJar","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"woojiahao"},"content":"# Temporarily move the existing save file to another name so that we can test and tear down","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"woojiahao"},"content":"mv data/data.json data/backup.json","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"woojiahao"},"content":"# run the program, feed cyrus.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"woojiahao"},"content":"# Execute the jar instead","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"woojiahao"},"content":"# Must run the jar from root directory","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"woojiahao"},"content":"java -jar build/libs/cyrus.jar \u003c text-ui-test/input.txt \u003e text-ui-test/ACTUAL.txt","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"woojiahao"},"content":"cd text-ui-test/","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"woojiahao"},"content":"# Once done with test, restore original data file","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"woojiahao"},"content":"rm ../data/data.json","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"woojiahao"},"content":"mv ../data/backup.json ../data/data.json","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"woojiahao"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"woojiahao":17,"-":35}}] diff --git a/woojiahao_ip_master/commits.json b/woojiahao_ip_master/commits.json index c737a50f..18547f16 100644 --- a/woojiahao_ip_master/commits.json +++ b/woojiahao_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"woojiahao":[{"date":"2023-08-19","commitResults":[{"hash":"8e492f545f94f155768b56234629fd05d9dc35aa","isMergeCommit":false,"messageTitle":"Rename Duke to Cyrus and add greeting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"201290054bcfdb15458a8ec1c92f7d7ed7420d57","isMergeCommit":false,"messageTitle":"Setup echo of commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":7}}},{"hash":"9ca029d82178c5bfb272eec5eb9f00e79d2e854c","isMergeCommit":false,"messageTitle":"Remove unneeded semicolon","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"0b5eff05874c277fc8e812db754a37a42eb253b3","isMergeCommit":false,"messageTitle":"Implement input storage and listing","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"8d45af5622ea8a741d382a90df698a1dd430c6f1","isMergeCommit":false,"messageTitle":"Implement marked status for tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":10}}},{"hash":"627bc338a00cf6992f5fab72ec00492d5e21a697","isMergeCommit":false,"messageTitle":"Set Task name to final","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7f7955007fdbfb42f889b466f1577680ff658429","isMergeCommit":false,"messageTitle":"Add ToDo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"7856a6fb5c0a5162a2ed5ac53fcaf046dfdb6a0f","isMergeCommit":false,"messageTitle":"Add Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"c7729690536a86922ad4d2b0b377c328aa4a1854","isMergeCommit":false,"messageTitle":"Add Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"76158e79006e994d418e9e0e434acf93e473a059","isMergeCommit":false,"messageTitle":"Refactor to use switch statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":31}}},{"hash":"41c89e47174ddd7cf9b22a04fd8f335365131a19","isMergeCommit":false,"messageTitle":"Use setDone instead of marking in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"78f78e83b43d61ba05c578c28c21d1fc41eabf0a","isMergeCommit":false,"messageTitle":"Add addToDo method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"38f3f43d46e22788b1f6e22c99a2c3526494e040","isMergeCommit":false,"messageTitle":"Add deadline handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":9}}},{"hash":"a84b37cc33fc751a5edbd198b6edc6a8d4c4d360","isMergeCommit":false,"messageTitle":"Add event creation handler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":15}}},{"hash":"5a5e1309d7ca459c7e82d502246e36df3074be65","isMergeCommit":false,"messageTitle":"Clean up command handling","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":18}}},{"hash":"2ec52fee412de987e44950508a9c5f9eadf1792f","isMergeCommit":false,"messageTitle":"Setup semi-automated test suite","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"9adb99c85514060b6edf010b0de9fd18c7b0ea4b","isMergeCommit":false,"messageTitle":"Handle command not found","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"76da37734dff5efb29de2caf750534aed3205a98","isMergeCommit":false,"messageTitle":"Use vararg for printText","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":17}}},{"hash":"8e3b209a0a8f5b4a1376f31fd286884d2da3fae6","isMergeCommit":false,"messageTitle":"Move all tasks to separate package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"77380533105747208bf65475b45c5eb9c7ec928c","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"f8be77c0f69a8ee52e13ed3200e7300b6845abf8","isMergeCommit":false,"messageTitle":"Handle empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"7a92a140c70c81e6e4e87d1b1019f5e649dca647","isMergeCommit":false,"messageTitle":"Use list of strings for addToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"ff342b88129347d07e97d3dd228471659684c0dd","isMergeCommit":false,"messageTitle":"Refactor deadline creation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":7}}},{"hash":"0e3064389bc33b7cd4d933e922a7f2c73f61a3f1","isMergeCommit":false,"messageTitle":"Refactor event creation","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":11}}},{"hash":"a6646360496fd7ed2a69c9e544f7e9f5a70f36c7","isMergeCommit":false,"messageTitle":"Clean up mark/unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":18}}},{"hash":"129b5df4d73ad6d94ee35e32f7dac13345a2927d","isMergeCommit":false,"messageTitle":"Clean up output","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"ee957b8cc97390ee814cc21023d1413437732456","isMergeCommit":false,"messageTitle":"Expand test suite","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":3},"java":{"insertions":4,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"473b98bd83f5b1127052f40497d90d1ad51907fe","isMergeCommit":false,"messageTitle":"Add error for /to before /from","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"437f673eb8128480f670aa8735641df215aaf51c","isMergeCommit":false,"messageTitle":"Trim all inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"973d43d0a9a84fdb046c1537b8a1ec42dfa8592c","isMergeCommit":false,"messageTitle":"Create TaskList singleton to centralise tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"ed3b1263bcf2a5dbd6185e1b95a0492efdc54877","isMergeCommit":false,"messageTitle":"Create PrintUtility to print formatted output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"d163df6d28b90d49ae68c505948aea168e8af5e0","isMergeCommit":false,"messageTitle":"Add ICommand to centralise command dispatch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"56b8863c765619450de8cf65d21905dd3e8145c8","isMergeCommit":false,"messageTitle":"Add AddTodo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"5b393872e260d671bb9807640f15561281b0d3dd","isMergeCommit":false,"messageTitle":"Add AddEvent command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"2d58e162887ef27681682ee4740bc0107669f868","isMergeCommit":false,"messageTitle":"Add AddDeadline event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"bd5b9b2f0a1b7c746f406c16614fff6494aa999e","isMergeCommit":false,"messageTitle":"Add ListTasks command to print task list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"bc9822279ec931b3d75536d57b4d4e2ad83a5021","isMergeCommit":false,"messageTitle":"Add DeleteTask command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"8e0214ad72824341f6f6b05639bbb230c28afba9","isMergeCommit":false,"messageTitle":"Add Mark/UnmarkTask commands to change task status","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":0}}},{"hash":"5b38ecd2a76c92b38d7fa645eadc4900f08c75b1","isMergeCommit":false,"messageTitle":"Add Unknown command to handle invalid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"4fcaa1c3d9071d52ae776419476a2ddf5e1fd216","isMergeCommit":false,"messageTitle":"Use command pattern to dispatch behavior","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":179}}},{"hash":"742a41b68253df3bfe8112f13856fa9acb26acf0","isMergeCommit":false,"messageTitle":"Flatten input and apply indentation to all lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"dbce4e1dc46f4f93f9515062265d0e3d98e83236","isMergeCommit":false,"messageTitle":"Move list tasks behavior to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":12}}},{"hash":"39335b07ae2f506817835184ebd1ccb0b2936c2c","isMergeCommit":false,"messageTitle":"Add data file parsing from JSON","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":3}}},{"hash":"ec952046fa7328990c475e5e484797a7a82b09f0","isMergeCommit":false,"messageTitle":"Setup save tasks after action","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"300d15f1a66dbaeae307f68f1b12d75a120bd6c2","isMergeCommit":false,"messageTitle":"Use GSON annotations to serialize Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":39}}},{"hash":"fb878fd3bbb2a26bd0e5cd4b0303a3895d263876","isMergeCommit":false,"messageTitle":"Use try-with-resources for loading tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"e49f0ba9fa3ef230ec8cd080dcdf10d330376b65","isMergeCommit":false,"messageTitle":"Add serialized type field for deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"040685022c49c5f4b2284d3f4d6ec955a64ab53d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"4cfa9d067c973f838bfd35cbe6015848462f1463","isMergeCommit":false,"messageTitle":"Parse date string as LocalDate for add deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":5}}},{"hash":"212281d0ea444e8ba926a9c5fcdd3b43d244482d","isMergeCommit":false,"messageTitle":"Handle dates for event task type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"497f822fa8a12632d5b540a236bc579df3cba2a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"edac524a3501de0e3ebe9b5e1259a29feeaa587a","isMergeCommit":false,"messageTitle":"Use more OOP + Dependency Injection","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":465,"deletions":336}}},{"hash":"24ece8f5a7a91a360d295fb1379cc9da91d0754f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8353f2013acb4b60753da4b6daf9f1b094ce3cb4","isMergeCommit":false,"messageTitle":"Use object equals for ParseInfo.EMPTY","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"18fef1bc948ca12fd05336f7ce04192ce7d5828d","isMergeCommit":false,"messageTitle":"Move to cyrus/ folder","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":87},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"bdea8b1bca8f32aedbdf30ccc100329357046ba1","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"13e410a9943e761a72edcf0a22f1cf13ecab4251","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ffb8c2adac35a2c0439a03b5dfad97e49fd7ed1a","isMergeCommit":false,"messageTitle":"Add Gradle dependency","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"125bd1b00a492cec56d832381b89fef94a20bc29","isMergeCommit":false,"messageTitle":"Fix parser bug with empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"03c12a00920884ea8a89fd40c933085c1c59eebf","isMergeCommit":false,"messageTitle":"Add test for empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"a2032b6fe522744c125a48195e313305fd725703","isMergeCommit":false,"messageTitle":"Add unit tests for parse input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"f24cfbb0e73beed174484bc429ba8bb715ae9526","isMergeCommit":false,"messageTitle":"Add test for option parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":5}}},{"hash":"aa3b7fbf5b0eb13263bed85927da8fc4f5726260","isMergeCommit":false,"messageTitle":"Fix option parsing","messageBody":"Primary issue was that options did not have any whitespace and lone /\nwould also cause the parser to treat it as an empty key\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"2ea83cd6161a2d6386f6d19b2e2e99732e8e8646","isMergeCommit":false,"messageTitle":"Add test for parsing without options","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"bbb38d8246651cf14bd8519c91de15a92ca88d59","isMergeCommit":false,"messageTitle":"Add unit test for CommandType parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"7a68cb3ec50117564191581f9c5e07c55976b410","isMergeCommit":false,"messageTitle":"Setup FileStorage tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":7}}},{"hash":"6f19bf49da2bc856ec564583d8b9b85d39816eec","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"25e39ba1405397b32ef6c3fe35935082800eacf3","isMergeCommit":false,"messageTitle":"Fix main class path","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"630e46630a197bb9152f18033d46e586cf101829","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"be56471d67c32df616eb50e6ba7a3b5f92fa6479","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":7}}},{"hash":"7dee34ba2657ac6172321fa3d8e69188a5c0bbb4","isMergeCommit":false,"messageTitle":"Add more JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":2}}},{"hash":"30430d5e08c6f148b649518f4453a6134e9191da","isMergeCommit":false,"messageTitle":"Clean up documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"b83bbf033e3773ea299afa9d295deab602820283","isMergeCommit":false,"messageTitle":"Run Intellij\u0027s formatter once","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"8e554ecd358d4a0da889efe3b978452d05c21a3f","isMergeCommit":false,"messageTitle":"Use full uppercase for constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":25}}},{"hash":"8f0503b9556c92667994654e35a52dfadc13cdb0","isMergeCommit":false,"messageTitle":"Abide by coding style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":554,"deletions":526}}},{"hash":"ebe7eab8733462bea18d7b8ac6c001be505a0780","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"7adc3819d8e27ce775e476cb20bda8fc272c1522","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bf02c6dff46fd8bc715f23077801b21e418a036","isMergeCommit":false,"messageTitle":"Add JavaDocs for FindTaskCommand","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16}}},{"hash":"f9e67c488072c2ac17511d7ec82bca6b47edbd90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"6caa35f84c564842d682cb9267fc3444623194d5","isMergeCommit":false,"messageTitle":"Format tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":72}}}]},{"date":"2023-08-31","commitResults":[{"hash":"700b535d67745e48989e326ce0cea1e649e8a460","isMergeCommit":false,"messageTitle":"Fix bugs from merge conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"72fea6bd2251ae7b05ff4d8f3844d0aa55569d28","isMergeCommit":false,"messageTitle":"Fix runtest script to work with Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":16},"sh":{"insertions":16,"deletions":2}}},{"hash":"44b67ba4596b89975b57c521a039c13f1c95c80a","isMergeCommit":false,"messageTitle":"Fix spelling issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e609f0fb97a6cf316c37aa388eeee97d1d228554","isMergeCommit":false,"messageTitle":"Setup Checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"3f46cfe019bd08eaf9ff03d803ec2d114ad9c0ce","isMergeCommit":false,"messageTitle":"Fix all checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":91}}},{"hash":"3f2eb899c5a1c2a0bd5671b7a1227ac0c86f57c2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"656c9a6eaa9a8ae1da702b327e200508b05d4a71","isMergeCommit":false,"messageTitle":"Add misc documentation","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"md":{"insertions":46,"deletions":24}}},{"hash":"0f674fd97696c1c5f285625b291505a0aca03e6f","isMergeCommit":false,"messageTitle":"Fix jar filename in runtest","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"f40886c563100226fe188900eddd8a69f5ea6fbd","isMergeCommit":false,"messageTitle":"Setup JavaFX dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0}}},{"hash":"8cd5ac44c19533f94f2fa97c7637f177f25fe5a1","isMergeCommit":false,"messageTitle":"Rename current Ui to CliUi","messageBody":"Ensures backward compatibility while migrating to use JavaFX\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":24}}},{"hash":"94ff66374072f421d85854af6f70762e951c40a8","isMergeCommit":false,"messageTitle":"Setup base JavaFX project","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e0eac9a7103aa344790a1c859e1a47fe7da689ba","isMergeCommit":false,"messageTitle":"Setup initial JavaFX styling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":6}}},{"hash":"8da8caa681b854c74c71c9480ad749f1f97e61f9","isMergeCommit":false,"messageTitle":"Setup echo user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":2}}},{"hash":"f1fa41ad599a228fe8f3a44dd1c2968326926792","isMergeCommit":false,"messageTitle":"Setup individual DialogBox for GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"java":{"insertions":66,"deletions":6}}},{"hash":"88872c49c2bc8ab2945dcc1fc3be89961ebeee9e","isMergeCommit":false,"messageTitle":"Add support for alignment text","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9bccd2f31f666ac0e31d5f91eb90c85ece734232","isMergeCommit":false,"messageTitle":"Refactor command system to return String[]","messageBody":"Parse the String[] and display in the GUI\n","fileTypesAndContributionMap":{"fxml":{"insertions":33,"deletions":0},"java":{"insertions":228,"deletions":255}}},{"hash":"07e5d7d797755b1633cba4e7269707a2acd2db3e","isMergeCommit":false,"messageTitle":"Style Cyrus GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"fxml":{"insertions":28,"deletions":26},"java":{"insertions":60,"deletions":50}}},{"hash":"2edf781294156a72f991868c97c69e5986277eb1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["v0.2","Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"5807a15a32030826b9ad4eaa8b82b67762994327","isMergeCommit":false,"messageTitle":"Use assert to enforce FileStorage assumptions","messageBody":"FileStorage currently does not enforce the dataFilePath and has a\nslightly awkward way of handling missing keys in the parsed data.\n\nThis runs the risk of having invalid input and the use of\nIllegalStateException does not make a lot of sense in the long run.\n\nAdopt assert statements to ensure dataFilePath is not empty and\nAssertionError is thrown instead of IllegalStateException for missing\nkeys.\n\nThis improves the visibility of configuration issues and makes it\nclearer why exactly the bot failed.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"08b0b4ab6a7e110699a0ed0d99d4d5e327595eb2","isMergeCommit":false,"messageTitle":"Add more unit tests for FileStorage invalid cases","messageBody":"The unit tests for FileStorage currently does not verify empty file\nnames and invalid data formats.\n\nThis creates missing test coverage that could lead to bugs.\n\nAdd two separate unit tests to ensure that empty file names and invalid\ndata formats both properly throw AssertionErrors.\n\nThis ensures the behavior are covered.\n","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":2}}},{"hash":"5446a4f090213bb3fe92c8e6e8aa7c0b9445db40","isMergeCommit":false,"messageTitle":"Improve the JavaDocs of LocalDateAdapter","messageBody":"The JavaDocs of LocalDateAdapter currently is worded ambiguously.\n\nThis creates confusion when reading them.\n\nReworded the documentation to be clearer.\n","tags":["A-FullCommitMesssage","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":9}}},{"hash":"4de04b825e9dd93f411735e694f745a63f6d9b7d","isMergeCommit":false,"messageTitle":"Create \"magic\" variable for option lead","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"280e6dbca2c06ec22e5cf3e6c31c217a931dfeac","isMergeCommit":false,"messageTitle":"Abstract valid part checking to method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"a714c76b65af7da76c8b9e0b4c6b92d715bd4af8","isMergeCommit":false,"messageTitle":"Remove public keyword for interface methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"38cb142295db1bb8480c949d5473134c86df5e1f","isMergeCommit":false,"messageTitle":"Rename user and bot image variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"315728b2a43df3f270a1fd84305bb0a4182cd926","isMergeCommit":false,"messageTitle":"Add text color option for GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":7}}},{"hash":"7fd8bafdbc991d1e7fb3773492401ccf465caf13","isMergeCommit":true,"messageTitle":"Merge pull request #1 from woojiahao/branch-A-Assertions","messageBody":"Add usage of `assert` keyword","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"be5fcc9b0270171d0a75b0a5c92125eb489f7213","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"38e5744edbaac18c355a22097932a26f5511a9b7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from woojiahao/branch-A-CodeQuality","messageBody":"Implement code quality changes","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"c21e51e2b8161f257bcc1f84e61459ad9462c8b4","isMergeCommit":false,"messageTitle":"Fix wildcard import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"fe564f34c0ea1d80d4de97bfd14ecc7aafbf5db2","isMergeCommit":true,"messageTitle":"Merge pull request #3 from woojiahao/branch-A-CI","messageBody":"Add unit test CI action for Github","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"826e59745f651791630ce2c54f0f2791dfe9181e","isMergeCommit":false,"messageTitle":"Setup skeleton command to handle statistics","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"432efed8845d1ae30a0c3e181bedb853a89e0c98","isMergeCommit":false,"messageTitle":"Add command return behavior for viewing statistics","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"759ea9dd09032fac405da901a3bce80fc76bd210","isMergeCommit":false,"messageTitle":"Add pie chart to visualise task distribution","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":38,"deletions":0},"java":{"insertions":91,"deletions":0}}},{"hash":"101dece759615262f220100392c235c534cd7fc8","isMergeCommit":false,"messageTitle":"Add completedDate and separate mark/unmark method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":11}}},{"hash":"c0bb2cbbb2aded0eadcdb26b4429c59ddae67982","isMergeCommit":false,"messageTitle":"Parse completedDate field from JSON","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"18ebaa4ba4ff06c94f571d075f876fefad60de2d","isMergeCommit":false,"messageTitle":"Render weekly task completion rate distribution","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"fxml":{"insertions":32,"deletions":35},"java":{"insertions":37,"deletions":5}}},{"hash":"b8fe4173309ebb1ef5d52a4f7e0790f7f2292abd","isMergeCommit":false,"messageTitle":"Fix coding standard violation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"cf7c9f412152139787a6688022d24d7b2c8d6c9b","isMergeCommit":true,"messageTitle":"Merge pull request #4 from woojiahao/branch-C-Statistics","messageBody":"Add statistics dashboard","tags":["C-Statistics","BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"woojiahao":{"java":1869,"md":40,"fxml":70,"sh":17,"bat":2,"gradle":26,"txt":14}},"authorContributionVariance":{"woojiahao":191605.52},"authorDisplayNameMap":{"woojiahao":"CS2103-T16-3 WOO .. HAO"}} +{"authorDailyContributionsMap":{"woojiahao":[{"date":"2023-08-19","commitResults":[{"hash":"8e492f545f94f155768b56234629fd05d9dc35aa","isMergeCommit":false,"messageTitle":"Rename Duke to Cyrus and add greeting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"201290054bcfdb15458a8ec1c92f7d7ed7420d57","isMergeCommit":false,"messageTitle":"Setup echo of commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":7}}},{"hash":"9ca029d82178c5bfb272eec5eb9f00e79d2e854c","isMergeCommit":false,"messageTitle":"Remove unneeded semicolon","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"0b5eff05874c277fc8e812db754a37a42eb253b3","isMergeCommit":false,"messageTitle":"Implement input storage and listing","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"8d45af5622ea8a741d382a90df698a1dd430c6f1","isMergeCommit":false,"messageTitle":"Implement marked status for tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":10}}},{"hash":"627bc338a00cf6992f5fab72ec00492d5e21a697","isMergeCommit":false,"messageTitle":"Set Task name to final","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7f7955007fdbfb42f889b466f1577680ff658429","isMergeCommit":false,"messageTitle":"Add ToDo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"7856a6fb5c0a5162a2ed5ac53fcaf046dfdb6a0f","isMergeCommit":false,"messageTitle":"Add Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"c7729690536a86922ad4d2b0b377c328aa4a1854","isMergeCommit":false,"messageTitle":"Add Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"76158e79006e994d418e9e0e434acf93e473a059","isMergeCommit":false,"messageTitle":"Refactor to use switch statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":31}}},{"hash":"41c89e47174ddd7cf9b22a04fd8f335365131a19","isMergeCommit":false,"messageTitle":"Use setDone instead of marking in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"78f78e83b43d61ba05c578c28c21d1fc41eabf0a","isMergeCommit":false,"messageTitle":"Add addToDo method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"38f3f43d46e22788b1f6e22c99a2c3526494e040","isMergeCommit":false,"messageTitle":"Add deadline handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":9}}},{"hash":"a84b37cc33fc751a5edbd198b6edc6a8d4c4d360","isMergeCommit":false,"messageTitle":"Add event creation handler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":15}}},{"hash":"5a5e1309d7ca459c7e82d502246e36df3074be65","isMergeCommit":false,"messageTitle":"Clean up command handling","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":18}}},{"hash":"2ec52fee412de987e44950508a9c5f9eadf1792f","isMergeCommit":false,"messageTitle":"Setup semi-automated test suite","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"9adb99c85514060b6edf010b0de9fd18c7b0ea4b","isMergeCommit":false,"messageTitle":"Handle command not found","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"76da37734dff5efb29de2caf750534aed3205a98","isMergeCommit":false,"messageTitle":"Use vararg for printText","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":17}}},{"hash":"8e3b209a0a8f5b4a1376f31fd286884d2da3fae6","isMergeCommit":false,"messageTitle":"Move all tasks to separate package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"77380533105747208bf65475b45c5eb9c7ec928c","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"f8be77c0f69a8ee52e13ed3200e7300b6845abf8","isMergeCommit":false,"messageTitle":"Handle empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"7a92a140c70c81e6e4e87d1b1019f5e649dca647","isMergeCommit":false,"messageTitle":"Use list of strings for addToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"ff342b88129347d07e97d3dd228471659684c0dd","isMergeCommit":false,"messageTitle":"Refactor deadline creation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":7}}},{"hash":"0e3064389bc33b7cd4d933e922a7f2c73f61a3f1","isMergeCommit":false,"messageTitle":"Refactor event creation","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":11}}},{"hash":"a6646360496fd7ed2a69c9e544f7e9f5a70f36c7","isMergeCommit":false,"messageTitle":"Clean up mark/unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":18}}},{"hash":"129b5df4d73ad6d94ee35e32f7dac13345a2927d","isMergeCommit":false,"messageTitle":"Clean up output","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"ee957b8cc97390ee814cc21023d1413437732456","isMergeCommit":false,"messageTitle":"Expand test suite","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":3},"java":{"insertions":4,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"473b98bd83f5b1127052f40497d90d1ad51907fe","isMergeCommit":false,"messageTitle":"Add error for /to before /from","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"437f673eb8128480f670aa8735641df215aaf51c","isMergeCommit":false,"messageTitle":"Trim all inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"973d43d0a9a84fdb046c1537b8a1ec42dfa8592c","isMergeCommit":false,"messageTitle":"Create TaskList singleton to centralise tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"ed3b1263bcf2a5dbd6185e1b95a0492efdc54877","isMergeCommit":false,"messageTitle":"Create PrintUtility to print formatted output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"d163df6d28b90d49ae68c505948aea168e8af5e0","isMergeCommit":false,"messageTitle":"Add ICommand to centralise command dispatch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"56b8863c765619450de8cf65d21905dd3e8145c8","isMergeCommit":false,"messageTitle":"Add AddTodo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"5b393872e260d671bb9807640f15561281b0d3dd","isMergeCommit":false,"messageTitle":"Add AddEvent command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"2d58e162887ef27681682ee4740bc0107669f868","isMergeCommit":false,"messageTitle":"Add AddDeadline event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"bd5b9b2f0a1b7c746f406c16614fff6494aa999e","isMergeCommit":false,"messageTitle":"Add ListTasks command to print task list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"bc9822279ec931b3d75536d57b4d4e2ad83a5021","isMergeCommit":false,"messageTitle":"Add DeleteTask command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"8e0214ad72824341f6f6b05639bbb230c28afba9","isMergeCommit":false,"messageTitle":"Add Mark/UnmarkTask commands to change task status","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":0}}},{"hash":"5b38ecd2a76c92b38d7fa645eadc4900f08c75b1","isMergeCommit":false,"messageTitle":"Add Unknown command to handle invalid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"4fcaa1c3d9071d52ae776419476a2ddf5e1fd216","isMergeCommit":false,"messageTitle":"Use command pattern to dispatch behavior","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":179}}},{"hash":"742a41b68253df3bfe8112f13856fa9acb26acf0","isMergeCommit":false,"messageTitle":"Flatten input and apply indentation to all lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"dbce4e1dc46f4f93f9515062265d0e3d98e83236","isMergeCommit":false,"messageTitle":"Move list tasks behavior to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":12}}},{"hash":"39335b07ae2f506817835184ebd1ccb0b2936c2c","isMergeCommit":false,"messageTitle":"Add data file parsing from JSON","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":3}}},{"hash":"ec952046fa7328990c475e5e484797a7a82b09f0","isMergeCommit":false,"messageTitle":"Setup save tasks after action","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"300d15f1a66dbaeae307f68f1b12d75a120bd6c2","isMergeCommit":false,"messageTitle":"Use GSON annotations to serialize Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":39}}},{"hash":"fb878fd3bbb2a26bd0e5cd4b0303a3895d263876","isMergeCommit":false,"messageTitle":"Use try-with-resources for loading tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"e49f0ba9fa3ef230ec8cd080dcdf10d330376b65","isMergeCommit":false,"messageTitle":"Add serialized type field for deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"040685022c49c5f4b2284d3f4d6ec955a64ab53d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"4cfa9d067c973f838bfd35cbe6015848462f1463","isMergeCommit":false,"messageTitle":"Parse date string as LocalDate for add deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":5}}},{"hash":"212281d0ea444e8ba926a9c5fcdd3b43d244482d","isMergeCommit":false,"messageTitle":"Handle dates for event task type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"497f822fa8a12632d5b540a236bc579df3cba2a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"edac524a3501de0e3ebe9b5e1259a29feeaa587a","isMergeCommit":false,"messageTitle":"Use more OOP + Dependency Injection","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":465,"deletions":336}}},{"hash":"24ece8f5a7a91a360d295fb1379cc9da91d0754f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8353f2013acb4b60753da4b6daf9f1b094ce3cb4","isMergeCommit":false,"messageTitle":"Use object equals for ParseInfo.EMPTY","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"18fef1bc948ca12fd05336f7ce04192ce7d5828d","isMergeCommit":false,"messageTitle":"Move to cyrus/ folder","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":87},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"bdea8b1bca8f32aedbdf30ccc100329357046ba1","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"13e410a9943e761a72edcf0a22f1cf13ecab4251","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ffb8c2adac35a2c0439a03b5dfad97e49fd7ed1a","isMergeCommit":false,"messageTitle":"Add Gradle dependency","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"125bd1b00a492cec56d832381b89fef94a20bc29","isMergeCommit":false,"messageTitle":"Fix parser bug with empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"03c12a00920884ea8a89fd40c933085c1c59eebf","isMergeCommit":false,"messageTitle":"Add test for empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"a2032b6fe522744c125a48195e313305fd725703","isMergeCommit":false,"messageTitle":"Add unit tests for parse input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"f24cfbb0e73beed174484bc429ba8bb715ae9526","isMergeCommit":false,"messageTitle":"Add test for option parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":5}}},{"hash":"aa3b7fbf5b0eb13263bed85927da8fc4f5726260","isMergeCommit":false,"messageTitle":"Fix option parsing","messageBody":"Primary issue was that options did not have any whitespace and lone /\nwould also cause the parser to treat it as an empty key\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"2ea83cd6161a2d6386f6d19b2e2e99732e8e8646","isMergeCommit":false,"messageTitle":"Add test for parsing without options","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"bbb38d8246651cf14bd8519c91de15a92ca88d59","isMergeCommit":false,"messageTitle":"Add unit test for CommandType parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"7a68cb3ec50117564191581f9c5e07c55976b410","isMergeCommit":false,"messageTitle":"Setup FileStorage tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":7}}},{"hash":"6f19bf49da2bc856ec564583d8b9b85d39816eec","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"25e39ba1405397b32ef6c3fe35935082800eacf3","isMergeCommit":false,"messageTitle":"Fix main class path","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"630e46630a197bb9152f18033d46e586cf101829","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"be56471d67c32df616eb50e6ba7a3b5f92fa6479","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":7}}},{"hash":"7dee34ba2657ac6172321fa3d8e69188a5c0bbb4","isMergeCommit":false,"messageTitle":"Add more JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":2}}},{"hash":"30430d5e08c6f148b649518f4453a6134e9191da","isMergeCommit":false,"messageTitle":"Clean up documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"b83bbf033e3773ea299afa9d295deab602820283","isMergeCommit":false,"messageTitle":"Run Intellij\u0027s formatter once","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"8e554ecd358d4a0da889efe3b978452d05c21a3f","isMergeCommit":false,"messageTitle":"Use full uppercase for constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":25}}},{"hash":"8f0503b9556c92667994654e35a52dfadc13cdb0","isMergeCommit":false,"messageTitle":"Abide by coding style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":554,"deletions":526}}},{"hash":"ebe7eab8733462bea18d7b8ac6c001be505a0780","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"7adc3819d8e27ce775e476cb20bda8fc272c1522","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bf02c6dff46fd8bc715f23077801b21e418a036","isMergeCommit":false,"messageTitle":"Add JavaDocs for FindTaskCommand","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16}}},{"hash":"f9e67c488072c2ac17511d7ec82bca6b47edbd90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"6caa35f84c564842d682cb9267fc3444623194d5","isMergeCommit":false,"messageTitle":"Format tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":72}}}]},{"date":"2023-08-31","commitResults":[{"hash":"700b535d67745e48989e326ce0cea1e649e8a460","isMergeCommit":false,"messageTitle":"Fix bugs from merge conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"72fea6bd2251ae7b05ff4d8f3844d0aa55569d28","isMergeCommit":false,"messageTitle":"Fix runtest script to work with Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":16},"sh":{"insertions":16,"deletions":2}}},{"hash":"44b67ba4596b89975b57c521a039c13f1c95c80a","isMergeCommit":false,"messageTitle":"Fix spelling issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e609f0fb97a6cf316c37aa388eeee97d1d228554","isMergeCommit":false,"messageTitle":"Setup Checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"3f46cfe019bd08eaf9ff03d803ec2d114ad9c0ce","isMergeCommit":false,"messageTitle":"Fix all checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":91}}},{"hash":"3f2eb899c5a1c2a0bd5671b7a1227ac0c86f57c2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"656c9a6eaa9a8ae1da702b327e200508b05d4a71","isMergeCommit":false,"messageTitle":"Add misc documentation","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"md":{"insertions":46,"deletions":24}}},{"hash":"0f674fd97696c1c5f285625b291505a0aca03e6f","isMergeCommit":false,"messageTitle":"Fix jar filename in runtest","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"f40886c563100226fe188900eddd8a69f5ea6fbd","isMergeCommit":false,"messageTitle":"Setup JavaFX dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0}}},{"hash":"8cd5ac44c19533f94f2fa97c7637f177f25fe5a1","isMergeCommit":false,"messageTitle":"Rename current Ui to CliUi","messageBody":"Ensures backward compatibility while migrating to use JavaFX\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":24}}},{"hash":"94ff66374072f421d85854af6f70762e951c40a8","isMergeCommit":false,"messageTitle":"Setup base JavaFX project","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e0eac9a7103aa344790a1c859e1a47fe7da689ba","isMergeCommit":false,"messageTitle":"Setup initial JavaFX styling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":6}}},{"hash":"8da8caa681b854c74c71c9480ad749f1f97e61f9","isMergeCommit":false,"messageTitle":"Setup echo user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":2}}},{"hash":"f1fa41ad599a228fe8f3a44dd1c2968326926792","isMergeCommit":false,"messageTitle":"Setup individual DialogBox for GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"java":{"insertions":66,"deletions":6}}},{"hash":"88872c49c2bc8ab2945dcc1fc3be89961ebeee9e","isMergeCommit":false,"messageTitle":"Add support for alignment text","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9bccd2f31f666ac0e31d5f91eb90c85ece734232","isMergeCommit":false,"messageTitle":"Refactor command system to return String[]","messageBody":"Parse the String[] and display in the GUI\n","fileTypesAndContributionMap":{"fxml":{"insertions":33,"deletions":0},"java":{"insertions":228,"deletions":255}}},{"hash":"07e5d7d797755b1633cba4e7269707a2acd2db3e","isMergeCommit":false,"messageTitle":"Style Cyrus GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"fxml":{"insertions":28,"deletions":26},"java":{"insertions":60,"deletions":50}}},{"hash":"2edf781294156a72f991868c97c69e5986277eb1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["v0.2","Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"5807a15a32030826b9ad4eaa8b82b67762994327","isMergeCommit":false,"messageTitle":"Use assert to enforce FileStorage assumptions","messageBody":"FileStorage currently does not enforce the dataFilePath and has a\nslightly awkward way of handling missing keys in the parsed data.\n\nThis runs the risk of having invalid input and the use of\nIllegalStateException does not make a lot of sense in the long run.\n\nAdopt assert statements to ensure dataFilePath is not empty and\nAssertionError is thrown instead of IllegalStateException for missing\nkeys.\n\nThis improves the visibility of configuration issues and makes it\nclearer why exactly the bot failed.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"08b0b4ab6a7e110699a0ed0d99d4d5e327595eb2","isMergeCommit":false,"messageTitle":"Add more unit tests for FileStorage invalid cases","messageBody":"The unit tests for FileStorage currently does not verify empty file\nnames and invalid data formats.\n\nThis creates missing test coverage that could lead to bugs.\n\nAdd two separate unit tests to ensure that empty file names and invalid\ndata formats both properly throw AssertionErrors.\n\nThis ensures the behavior are covered.\n","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":2}}},{"hash":"5446a4f090213bb3fe92c8e6e8aa7c0b9445db40","isMergeCommit":false,"messageTitle":"Improve the JavaDocs of LocalDateAdapter","messageBody":"The JavaDocs of LocalDateAdapter currently is worded ambiguously.\n\nThis creates confusion when reading them.\n\nReworded the documentation to be clearer.\n","tags":["A-FullCommitMesssage","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":9}}},{"hash":"4de04b825e9dd93f411735e694f745a63f6d9b7d","isMergeCommit":false,"messageTitle":"Create \"magic\" variable for option lead","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"280e6dbca2c06ec22e5cf3e6c31c217a931dfeac","isMergeCommit":false,"messageTitle":"Abstract valid part checking to method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"a714c76b65af7da76c8b9e0b4c6b92d715bd4af8","isMergeCommit":false,"messageTitle":"Remove public keyword for interface methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"38cb142295db1bb8480c949d5473134c86df5e1f","isMergeCommit":false,"messageTitle":"Rename user and bot image variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"315728b2a43df3f270a1fd84305bb0a4182cd926","isMergeCommit":false,"messageTitle":"Add text color option for GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":7}}},{"hash":"7fd8bafdbc991d1e7fb3773492401ccf465caf13","isMergeCommit":true,"messageTitle":"Merge pull request #1 from woojiahao/branch-A-Assertions","messageBody":"Add usage of `assert` keyword","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"be5fcc9b0270171d0a75b0a5c92125eb489f7213","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"38e5744edbaac18c355a22097932a26f5511a9b7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from woojiahao/branch-A-CodeQuality","messageBody":"Implement code quality changes","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"c21e51e2b8161f257bcc1f84e61459ad9462c8b4","isMergeCommit":false,"messageTitle":"Fix wildcard import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"fe564f34c0ea1d80d4de97bfd14ecc7aafbf5db2","isMergeCommit":true,"messageTitle":"Merge pull request #3 from woojiahao/branch-A-CI","messageBody":"Add unit test CI action for Github","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"826e59745f651791630ce2c54f0f2791dfe9181e","isMergeCommit":false,"messageTitle":"Setup skeleton command to handle statistics","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"432efed8845d1ae30a0c3e181bedb853a89e0c98","isMergeCommit":false,"messageTitle":"Add command return behavior for viewing statistics","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"759ea9dd09032fac405da901a3bce80fc76bd210","isMergeCommit":false,"messageTitle":"Add pie chart to visualise task distribution","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":38,"deletions":0},"java":{"insertions":91,"deletions":0}}},{"hash":"101dece759615262f220100392c235c534cd7fc8","isMergeCommit":false,"messageTitle":"Add completedDate and separate mark/unmark method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":11}}},{"hash":"c0bb2cbbb2aded0eadcdb26b4429c59ddae67982","isMergeCommit":false,"messageTitle":"Parse completedDate field from JSON","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"18ebaa4ba4ff06c94f571d075f876fefad60de2d","isMergeCommit":false,"messageTitle":"Render weekly task completion rate distribution","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"fxml":{"insertions":32,"deletions":35},"java":{"insertions":37,"deletions":5}}},{"hash":"b8fe4173309ebb1ef5d52a4f7e0790f7f2292abd","isMergeCommit":false,"messageTitle":"Fix coding standard violation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"cf7c9f412152139787a6688022d24d7b2c8d6c9b","isMergeCommit":true,"messageTitle":"Merge pull request #4 from woojiahao/branch-C-Statistics","messageBody":"Add statistics dashboard","tags":["C-Statistics","BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-18","commitResults":[{"hash":"bfa6c82fa37aad9b2a23fc27471bf0ba45bc2447","isMergeCommit":false,"messageTitle":"Use IllegalStateException as assert may be ignored","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"0c28333e9583fa0c85f5ad3a2801d02d3fe7bc4b","isMergeCommit":false,"messageTitle":"Reduce load method length","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":18}}},{"hash":"6dd115890ad3c4e6a19a0380ba5ddd4d1c97baed","isMergeCommit":false,"messageTitle":"Abstract data loading to separate methods","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":2},"java":{"insertions":42,"deletions":27}}},{"hash":"396ed91b46965206a6b4d5eebe46572d5b63f8ed","isMergeCommit":false,"messageTitle":"Address JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"0f479ec43a28323c2bead5c50287d5cfd3af088d","isMergeCommit":false,"messageTitle":"Apply base style tweaks","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":18,"deletions":13},"java":{"insertions":6,"deletions":4}}},{"hash":"951da8e8bf3c3e95ec6610d61345539fb608125a","isMergeCommit":false,"messageTitle":"Add welcome text on chat start","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"20103341e03bc8feaa6413165e7956eeaf175e07","isMergeCommit":false,"messageTitle":"Fix broken unit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"8dfcb8f6fe0dee9e83bdaf98d5d0aaaeeb3e8c2d","isMergeCommit":true,"messageTitle":"Merge pull request #6 from woojiahao/branch-A-BetterGui","messageBody":"Add better GUI","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"woojiahao":{"java":1922,"md":40,"fxml":75,"sh":17,"bat":2,"gradle":26,"txt":14}},"authorContributionVariance":{"woojiahao":163388.45},"authorDisplayNameMap":{"woojiahao":"CS2103-T16-3 WOO .. HAO"}} diff --git a/yucongkoo_ip_master/authorship.json b/yucongkoo_ip_master/authorship.json index 880a434a..8d3d3691 100644 --- a/yucongkoo_ip_master/authorship.json +++ b/yucongkoo_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":"yucongkoo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yucongkoo":18,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"# User Guide for Orion","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"### Managing your tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"Users can add tasks of 3 kinds,\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"a TODO task that contains a description,\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"a DEADLINE task that contains a description and a deadline,\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"an EVENT task that contains a description, an event start date and an event end date.","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"Users can also delete tasks if the task is no longer relevant.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"### Finding your tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"Users can find tasks using its description(or partial description) effectively.","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"### `list` - List out all your tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"Orion will list out all your tasks that is being tracked by Orion.","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"`list`","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"1.[T][ ] play","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"2.[D][ ] submit homework (by: Aug 9 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":"3.[E][X] attend hackathon (from: Aug 10 2023 to: Aug 11 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":"### `mark` - Mark your task as done.","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":"Orion will mark your task specified by its index(1-indexed) as done.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"`mark \u003cindex of task to be marked\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":"Example of usage:\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"`mark 1`","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" [T][X] play","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"### `unmark` - Mark your task as done.","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":"Orion will mark your task specified by its index(1-indexed) as done.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":"`unmark \u003cindex of task to be unmarked\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":"`unmark 3`","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" [E][ ] attend hackathon (from: Aug 10 2023 to: Aug 11 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":"### `todo` - Add a TODO task.","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":"Orion will add a TODO task with the given description.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":"`todo \u003cdescription of your TODO task\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":"`todo I am adding a TODO`","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" [T][ ] I am adding a TODO","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":"Now you have 4 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":"### `deadline` - Add a DEADLINE task.","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":"Orion will add a DEADLINE task with the given description and deadline.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":"`deadline \u003cdescription\u003e /by \u003cdeadline in the format yyyy-mm-dd\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":93,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":"`deadline submission /by 2023-05-05`","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":97,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" [D][ ] submission (by: May 5 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":"Now you have 5 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":"### `event` - Add an EVENT task.","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":"Orion will add an EVENT task with the given description, event start date and event end date.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":"`event \u003cdescription\u003e /from \u003cstart date in the format yyyy-mm-dd\u003e /to \u003cend date in the format yyyy-mm-dd\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":"`event attend carnival /from 2023-05-06 /to 2023-05-08`","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" [E][ ] attend carnival (from: May 6 2023 to: May 8 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":"Now you have 6 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":"### `delete` - Delete a task.","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":"Orion will delete the task specified by its index(1-indexed).\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":"`delete \u003cindex of task to be deleted\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":"Example of usage:\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":"`delete 2`","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":"Noted! I\u0027ve removed this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":" [D][ ] submit homework (by: Aug 9 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":"Now you have 5 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":137,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":138,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":139,"author":{"gitId":"yucongkoo"},"content":"### `find` - Find a task.","lastModifiedDate":"2023-09-14"},{"lineNumber":140,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":141,"author":{"gitId":"yucongkoo"},"content":"Orion will find a task using the given description and wil return the list of tasks that has matched or partially matched the description.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":142,"author":{"gitId":"yucongkoo"},"content":"`find \u003cdescription to be searched\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":143,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":144,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":145,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":146,"author":{"gitId":"yucongkoo"},"content":"`find attend`","lastModifiedDate":"2023-09-14"},{"lineNumber":147,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":148,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":150,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":151,"author":{"gitId":"yucongkoo"},"content":"Here are the matching tasks in your list:","lastModifiedDate":"2023-09-14"},{"lineNumber":152,"author":{"gitId":"yucongkoo"},"content":"2.[E][X] attend hackathon (from: Aug 10 2023 to: Aug 11 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":153,"author":{"gitId":"yucongkoo"},"content":"5.[E][ ] attend carnival (from: May 6 2023 to: May 8 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":154,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":155,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":156,"author":{"gitId":"yucongkoo"},"content":"### `bye` - Quits the application.","lastModifiedDate":"2023-09-14"},{"lineNumber":157,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":158,"author":{"gitId":"yucongkoo"},"content":"Orion will quit the application and close the window.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":159,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":160,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":161,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":162,"author":{"gitId":"yucongkoo"},"content":"`bye`","lastModifiedDate":"2023-09-14"},{"lineNumber":163,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":164,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":165,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"yucongkoo"},"content":"The application window will close.","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"yucongkoo":137,"-":29}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a command that can be executed, performing specific tasks when doing so.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" * Checks whether this command is an exit command.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * @return True if command is exit command.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * Executes this command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param taskManager The task manager that modifies the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" * @param diskManager The disk manager that handles updating data in local disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException When something went wrong during execution.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public abstract String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":26}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" * Represents a deadline command where when executed, adds a task with deadline to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * Constructs a DeadlineCommand object using a description and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" * @param description The description for the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param deadline The deadline for the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public DeadlineCommand(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"description of deadline command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" assert this.deadline !\u003d null : \"deadline of deadline command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.addTask(new Deadline(description, deadline));","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof DeadlineCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" DeadlineCommand temp \u003d (DeadlineCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" return temp.deadline.equals(this.deadline) \u0026\u0026 temp.description.equals(this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":52}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a delete command where when executed, deletes the specific task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Constructs the DeleteCommand using the 1-indexed index.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param index The index of task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.deleteTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof DeleteCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" DeleteCommand temp \u003d (DeleteCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return temp.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":43}},{"path":"src/main/java/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents an empty command that does nothing.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class EmptyCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException{","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! You forgot to input the command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" return other instanceof EmptyCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":25}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" * Represents an event command where when executed, adds a task with a start and end to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * Constructs an EventCommand using the description, start date and end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param description The description to the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" * @param start The start date.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" * @param end The end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public EventCommand(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"description of event command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" assert this.start !\u003d null : \"start date of event command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" assert this.end !\u003d null : \"end date of event command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.addTask(new Event(description, start, end));","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" private boolean hasSamePeriod(EventCommand other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" return this.start.equals(other.start)","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" \u0026\u0026 this.end.equals(other.end);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" private boolean hasSameDescription(EventCommand other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" return this.description.equals(other.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof EventCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" EventCommand temp \u003d (EventCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" return this.hasSameDescription(temp)","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" \u0026\u0026 this.hasSamePeriod(temp);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":65}},{"path":"src/main/java/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" * Represents an exit command where when executed, exits the application.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" return other instanceof ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":24}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a find command where when executed,","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" * finds all task that matches the string pattern.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" private String pattern;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" * Constructs a FindCommand with the input.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * @param pattern The pattern to find.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" public FindCommand(String pattern) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" this.pattern \u003d pattern;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" assert this.pattern !\u003d null : \"pattern of find command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" return taskManager.find(pattern);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof FindCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" FindCommand temp \u003d (FindCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" return temp.pattern.equals(this.pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"yucongkoo":43}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" * Represents a list command where when executed, prints the list of current tasks to the ui.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" return taskManager.listTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" return other instanceof ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":25}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a mark command where when executed, marks the specified task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Constructs a MarkCommand using the 1-indexed index.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.markTask(index, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof MarkCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" MarkCommand temp \u003d (MarkCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return temp.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":42}},{"path":"src/main/java/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" * Represents a to-do command where when executed, adds a to-do task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" * Constructs a TodoCommand with the description provided.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param description The description of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"description of todo command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.addTask(new Todo(description));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof TodoCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" TodoCommand temp \u003d (TodoCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return temp.description.equals(this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":44}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents an unmark command where when executed, marks the specific task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Constructs an UnmarkCommand using the 1-indexed index.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.markTask(index, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof UnmarkCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" UnmarkCommand temp \u003d (UnmarkCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return temp.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":42}},{"path":"src/main/java/duke/DiskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.core.JsonProcessingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.databind.jsontype.NamedType;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import java.io.*;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Represents the disk manager which handles operation related to disk storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"public class DiskManager {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" private static final ObjectMapper MAPPER \u003d new ObjectMapper();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" static {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerSubtypes(new NamedType(Todo.class, \"Todo\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerSubtypes(new NamedType(Deadline.class, \"Deadline\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerSubtypes(new NamedType(Event.class, \"Event\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" private String directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" private String fileName;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" * Constructs a DiskManager with a directory path and file name, all storage operation","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" * will then operate on the file path specified.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" * @param directoryPath The path to the directory of the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" * @param fileName The file name of the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public DiskManager(String directoryPath, String fileName) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" private File getFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" String filePath \u003d directoryPath + \"/\" + fileName;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" String currentWorkingDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" // create a file object for the directory","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" File directory \u003d new File(currentWorkingDir, directoryPath);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" // If the directory does not exist, create it","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" // Create a File object for the file within the directory","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" File file \u003d new File(currentWorkingDir, filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" // If the file doesn\u0027t exist, create a new one","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" assert file !\u003d null : \"file returned by getFile() should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" return file;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" private String taskManagerToJson(TaskManager taskManager) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" assert taskManager !\u003d null : \"taskManager should not be null when converting to JSON format\";","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" return MAPPER.writeValueAsString(taskManager);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" } catch (JsonProcessingException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when saving task list to local disk.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" * Saves the task manager that encapsulates the task list to the disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" * @param taskManager The task manager to be saved to disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If taskManager could not be serialized into json or FileWriter failed to write to the disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":" public void saveToDisk(TaskManager taskManager) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" assert taskManager !\u003d null : \"taskManager should not be null when saving to disk\";","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":" String json \u003d taskManagerToJson(taskManager);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" File file \u003d getFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" fileWriter.write(json);","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when writing to local disk.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":" * Loads data from the disk and returns the task manager encapsulating the data.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" * @return The task manager.","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If could not read file from disk or could not deserialize the data read from disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":" public TaskManager loadFromDisk() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":" File file \u003d getFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" // read the file","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" StringBuilder jsonData \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":" String line;","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" while (true) {","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":" if (line \u003d\u003d null) {","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":" jsonData.append(line);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" String json \u003d jsonData.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" if (json.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" return new TaskManager();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" TaskManager taskManager \u003d MAPPER.readValue(json, TaskManager.class);","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" assert taskManager !\u003d null : \"taskManger loaded from disks should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":" return taskManager;","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" } catch (JsonProcessingException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when deserializing file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when reading file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"yucongkoo":131}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents the command line application Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class Duke {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private DiskManager diskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" private TaskManager taskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private Stage stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * Constructs Duke with the directory path and file name that specifies the filepath","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * of data Duke should run on.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" * @param directoryPath The directory path.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param fileName The file name.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public Duke(String directoryPath, String fileName, Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" this.diskManager \u003d new DiskManager(directoryPath, fileName);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" this.taskManager \u003d this.diskManager.loadFromDisk();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" this.taskManager \u003d new TaskManager();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" assert this.stage !\u003d null : \"stage of Duke instance should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" assert this.taskManager !\u003d null : \"taskManager of Duke instance should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" assert this.diskManager !\u003d null : \"diskManager of Duke instance should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" * Executes the respective input received from Ui.","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" * @param input The input received from Ui.","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" * @return The string output to be printed to Ui.","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" public String execute(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" Command c \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" stage.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" String res \u003d c.execute(taskManager, diskManager);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":57}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":" * Represents an exception that will be thrown by Duke operations.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Constructs the Duke Exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * @param errMsg The error message that is supposed to be printed into the command line.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public DukeException(String errMsg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" super(errMsg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":15}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" // private Duke duke \u003d new Duke(\"data\", \"tasks.json\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" assert stage !\u003d null : \"stage should not be null when starting an application on javaFx\";","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" stage.setTitle(\"Orion\");","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" Duke duke \u003d new Duke(\"data\", \"tasks.json\", stage);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":35}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import command.EmptyCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import command.EventCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import command.ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import command.FindCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import command.ListCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"import command.TodoCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"import task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"import task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" * Represents a parser class that will be in charge of parsing user commands","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" * for Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_BYE \u003d \"bye\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_LIST \u003d \"list\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_MARK \u003d \"mark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_TODO \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_EVENT \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_FIND \u003d \"find\";","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" * Parses the input passed in and return the respective command.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" * @return The command represented by input.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If the command format is invalid or unrecognized.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" public static Command parseCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" input \u003d input.trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" // skip past empty lines","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" String[] parts \u003d input.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" String command \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" String value \u003d parts.length \u003e\u003d 2 ? parts[1].trim() : \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" switch (command) {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" case FLAG_BYE:","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" return parseByeCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" case FLAG_LIST:","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" return parseListCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" case FLAG_MARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" return parseMarkCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" case FLAG_UNMARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" return parseUnmarkCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" case FLAG_TODO:","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" return parseTodoCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" case FLAG_DEADLINE:","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" return parseDeadlineCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" case FLAG_EVENT:","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" return parseEventCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" case FLAG_DELETE:","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" return parseDeleteCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" case FLAG_FIND:","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" return parseFindCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" private static Command parseByeCommand(String value) throws DukeException{","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" if (!value.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The bye command should not be followed by any description\");","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" private static Command parseListCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" if (!value.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The list command should not be followed by any description\");","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" private static Command parseMarkCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":" Scanner tempSc \u003d new Scanner(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":" if (!tempSc.hasNextInt()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a mark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":" int index \u003d tempSc.nextInt();","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" if (tempSc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":" // means invalid formatting for done command","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a mark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":" private static Command parseUnmarkCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" Scanner tempSc \u003d new Scanner(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" if (!tempSc.hasNextInt()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of an unmark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":" int index \u003d tempSc.nextInt();","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" if (tempSc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" // means invalid formatting for done command","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of an unmark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":" private static Command parseTodoCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"yucongkoo"},"content":" if (value.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The description of a todo task cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":" return new TodoCommand(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"yucongkoo"},"content":" private static Command parseDeadlineCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":140,"author":{"gitId":"yucongkoo"},"content":" String[] tempParts \u003d value.split(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"yucongkoo"},"content":" // did not provide the /by argument","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"yucongkoo"},"content":" if (tempParts.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! You forgot to provide a deadline for the deadline task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"yucongkoo"},"content":" String taskName \u003d tempParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"yucongkoo"},"content":" String deadline \u003d tempParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"yucongkoo"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The description of a deadline task cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"yucongkoo"},"content":" if (deadline.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! You forgot to provide a deadline for the deadline task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"yucongkoo"},"content":" LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"yucongkoo"},"content":" date \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"yucongkoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!! the date format of deadline is incorrect, \"","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"yucongkoo"},"content":" + \"please use the format yyyy-mm-dd\");","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"yucongkoo"},"content":" return new DeadlineCommand(taskName, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"yucongkoo"},"content":" private static Command parseEventCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":168,"author":{"gitId":"yucongkoo"},"content":" String[] tempParts \u003d value.split(\"/from|/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"yucongkoo"},"content":" // did not provide the /from /to arguments","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"yucongkoo"},"content":" if (tempParts.length \u003c 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Please provide a proper period for the event task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"yucongkoo"},"content":" String taskName \u003d tempParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"yucongkoo"},"content":" String start \u003d tempParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"yucongkoo"},"content":" String end \u003d tempParts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"yucongkoo"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The description of an event task cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"yucongkoo"},"content":" if (start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Please provide a proper period for the event task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"yucongkoo"},"content":" LocalDate startDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"yucongkoo"},"content":" LocalDate endDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"yucongkoo"},"content":" startDate \u003d LocalDate.parse(start);","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"yucongkoo"},"content":" endDate \u003d LocalDate.parse(end);","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"yucongkoo"},"content":" if (endDate.isBefore(startDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! End date of an event should \"","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"yucongkoo"},"content":" + \"not be earlier than the start date.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"yucongkoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!! the date format of event is incorrect, \"","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"yucongkoo"},"content":" + \"please use the format yyyy-mm-dd\");","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"yucongkoo"},"content":" return new EventCommand(taskName, startDate, endDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":200,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"yucongkoo"},"content":" private static Command parseDeleteCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":203,"author":{"gitId":"yucongkoo"},"content":" Scanner tempSc \u003d new Scanner(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"yucongkoo"},"content":" if (!tempSc.hasNextInt()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a delete command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"yucongkoo"},"content":" int index \u003d tempSc.nextInt();","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"yucongkoo"},"content":" if (tempSc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"yucongkoo"},"content":" // means invalid formatting for done command","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a delete command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"yucongkoo"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"yucongkoo"},"content":" private static Command parseFindCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":221,"author":{"gitId":"yucongkoo"},"content":" if (value.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":222,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Please provide an input to find\");","lastModifiedDate":"2023-08-28"},{"lineNumber":223,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":224,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":225,"author":{"gitId":"yucongkoo"},"content":" return new FindCommand(value);","lastModifiedDate":"2023-08-28"},{"lineNumber":226,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":227,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":227}},{"path":"src/main/java/duke/TaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * Represents a task manager that helps manage the list of tasks for Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"public class TaskManager {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" /** Constructs a TaskManager with empty task list. */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public TaskManager() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" return this.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public void setTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" * Lists the tasks in order.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" * @return The string representation of the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public String listTasks() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" return \"There are no tasks in your list.\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); ++i) {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" String item \u003d (i + 1) + \".\" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" sb.append(item);","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" return sb.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" * Adds a task to the end of the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" * @return The string description after adding the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" return \"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" * Marks the i-th task as either done or not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" * @param i The index of the task in the list(1-indexed).","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" * @param done Whether to mark the task as done or not.","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" * @return The String description after marking the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" public String markTask(int i, boolean done) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" i--;","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" if (i \u003c 0 || i \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" // invalid index","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Please input a valid index for the task to marked/unmarked\");","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" Task task \u003d this.tasks.get(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" task.markTask(done);","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":" return done","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" ? \"Nice! I\u0027ve marked this task as done:\\n \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" : \"OK, I\u0027ve marked this task as not done yet:\\n \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" * Deletes the i-th task from the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" * @param i The index of the task to be deleted(1-indexed).","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" * @return The string description after deleting the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":" public String deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" i--;","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":" if (i \u003c 0 || i \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" // invalid index","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Please input a valid index for the task to removed\");","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" Task task \u003d this.tasks.remove(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" return \"Noted! I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" + \"Now you have \" + this.tasks.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" * Finds the tasks that has description that matches the pattern.","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" * @param pattern The pattern to be matched.","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":" * @return The string representation of task found.","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" public String find(String pattern) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":" sb.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" boolean found \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); ++i) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" if (t.descriptionContains(pattern)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" found \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" sb.append(i + 1 + \". \");","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":" sb.append(t);","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":" sb.append(\u0027\\n\u0027);","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" return found ? sb.toString() : \"There is no task that matched.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"yucongkoo"},"content":" sb.append(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":136}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"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":21,"author":{"gitId":"yucongkoo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"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":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":62}},{"path":"src/main/java/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userImg.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/botImg.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" // greet the users","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" String greetings \u003d \"Hello! I\u0027m Orion\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(greetings, dukeImage));","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"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":48,"author":{"gitId":"yucongkoo"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" return duke.execute(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":69}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * Constructs a Deadline Task using the task name and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * @param taskName The task name of the constructed Deadline Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * @param deadline The deadline of the constructed Deadline Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public Deadline(@JsonProperty(\"taskName\") String taskName, @JsonProperty(\"deadline\") LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" public LocalDate getDeadline() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" return this.deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" public void setDeadline(LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" assert this.deadline !\u003d null : \"deadline should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" private String getFormattedDeadline() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + getFormattedDeadline() + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":45}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * Constructs an Event Task using the task name, start date and end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * @param taskName The task name for the constructed.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * @param start The start of the period for the constructed event.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" * @param end The end of the period for the constructed event.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public Event(@JsonProperty(\"taskName\") String taskName","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" , @JsonProperty(\"start\") LocalDate start, @JsonProperty(\"end\") LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" public LocalDate getStart() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return start;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public LocalDate getEnd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" return end;","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" public void setStart(LocalDate start) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" assert this.start !\u003d null : \"start date of an Event should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" public void setEnd(LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" assert this.end !\u003d null : \"end date of an Event should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" private String getFormattedDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" + \" (from: \" + getFormattedDate(this.start)","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" + \" to: \" + getFormattedDate(this.end) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":58}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" * Represents an abstract task class.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"@JsonTypeInfo(use \u003d JsonTypeInfo.Id.NAME, include \u003d JsonTypeInfo.As.PROPERTY)","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" @JsonSubTypes.Type(value \u003d Todo.class, name \u003d \"Todo\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"Deadline\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"Event\")","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"})","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" * Constructs a Task with a task name.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" * @param description The name of the constructed task.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" public Task(@JsonProperty(\"description\") String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" return description;","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" return isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"task description should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" public void setDone(boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" * Marks this task as done or not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" * @param done Whether the task is done or not","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" public void markTask(boolean done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" char marked \u003d \u0027X\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" return \"[\" + (isDone ? marked : \" \") + \"] \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" * Finds whether the description has the pattern in it.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" * @param pattern The pattern to be matched.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" * @return True if pattern is found in description.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" public boolean descriptionContains(String pattern) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" int pos \u003d this.description.indexOf(pattern);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" return pos \u003e\u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":74}},{"path":"src/main/java/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" * Represents a to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" * Constructs a to-do Task with taskName.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" * @param taskName the task name of the to-do task","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" public Todo(@JsonProperty(\"taskName\") String taskName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":24}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" 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-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" \u003cLabel HBox.hgrow\u003d\"ALWAYS\" fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" \u003cRegion HBox.hgrow\u003d\"NEVER\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" \u003c/Region\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"70\" fitWidth\u003d\"70\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" \u003cCircle radius\u003d\"35.0\" centerX\u003d\"35.0\" centerY\u003d\"35.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":28}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"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-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"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-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"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":14,"author":{"gitId":"yucongkoo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":19}},{"path":"src/test/java/duke/DiskManagerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class DiskManagerTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadDummyFile_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" String expected \u003d \"[T][ ] play[D][ ] play (by: Aug 9 2023)[E][X] play (from: Apr 4 2023 to: May 5 2023)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" assertEquals(expected,","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" new DiskManager(\"src/test/resources\", \"tasks.json\")","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" .loadFromDisk().toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadCorruptedFile_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" new DiskManager(\"src/test/resources\", \"tasks_corrupted.json\").loadFromDisk();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Error when deserializing file\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadEmptyFile_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"\", new DiskManager(\"src/test/resources\", \"tasks_empty.json\")","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" .loadFromDisk().toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadNonExistingFile_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" String filePath \u003d \"src/test/resources/dummy.json\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" file.delete();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"\", new DiskManager(\"src/test/resources\", \"dummy.json\")","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" .loadFromDisk().toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yucongkoo":46}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import command.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_emptyString_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new EmptyCommand(), Parser.parseCommand(\"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_spaces_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new EmptyCommand(), Parser.parseCommand(\" \"));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_byeCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\"bye\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_byeCommandWithspace_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\" bye \"));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_byeCommandWithArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"bye 45\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The bye command should not be followed by any description\"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_listCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new ListCommand(), Parser.parseCommand(\"list\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_listCommandWithArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"list 123\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The list command should not be followed by any description\"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_markCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new MarkCommand(1), Parser.parseCommand(\"mark 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_markCommandWithNonInteger_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"mark sh\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a mark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_markCommandWithMultipleArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"mark 1 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a mark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unmarkCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new UnmarkCommand(1), Parser.parseCommand(\"unmark 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unmarkCommandWithNonInteger_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"unmark sh\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of an unmark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unmarkCommandWithMultipleArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"unmark 1 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of an unmark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_todoCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new TodoCommand(\"test\"), Parser.parseCommand(\"todo test\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_todoCommandWithoutDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"todo \");","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The description of a todo task cannot be empty\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new DeadlineCommand(\"test\", LocalDate.of(2023, 8, 8))","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"yucongkoo"},"content":" , Parser.parseCommand(\"deadline test /by 2023-08-08\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWithoutArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline \");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! You forgot to provide a deadline for the deadline task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWithEmptyDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline /by 2023-08-08\");","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The description of a deadline task cannot be empty\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWithEmptyDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline test /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! You forgot to provide a deadline for the deadline task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWitInvalidDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline test /by 2023/04/12\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!! the date format of deadline is incorrect\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"yucongkoo"},"content":" \", please use the format yyyy-mm-dd\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new EventCommand(\"test\"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"yucongkoo"},"content":" , LocalDate.of(2023, 8, 8)","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"yucongkoo"},"content":" , LocalDate.of(2023, 9, 9))","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"yucongkoo"},"content":" , Parser.parseCommand(\"event test /from 2023-08-08 /to 2023-09-09\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event \");","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutFrom_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutTo_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /from 2023-08-08\");","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithEmptyTo_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /from /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /from 2023-08-08 /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The description of an event task cannot be empty\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithInvalidDateRange_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event test /from 2023-09-10 /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! End date of an event should not be earlier than the start date.\"","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithInvalidFromDate_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event test /from 2023/10/10 /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!! the date format of event is incorrect\"","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"yucongkoo"},"content":" + \", please use the format yyyy-mm-dd\"","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithInvalidToDate_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event test /from 2023-10-10 /to 2023/09/09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!! the date format of event is incorrect\"","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"yucongkoo"},"content":" + \", please use the format yyyy-mm-dd\"","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deleteCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new DeleteCommand(1), Parser.parseCommand(\"delete 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deleteCommandWithNonInteger_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"delete sh\");","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a delete command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deleteCommandWithMultipleArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"delete 1 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a delete command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_findCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new FindCommand(\"test\"), Parser.parseCommand(\"find test\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_findCommandWithoutDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"find \");","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide an input to find\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unrecognisedCommand_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"blah\");","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":317,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-08-30"},{"lineNumber":318,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":319,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":320,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":321,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yucongkoo":321}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"bye 123","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"list 123","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"mark 1 1","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"mark 12","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"mark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"deadline return book /by","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"deadline /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":"event project meeting","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"event project meeting /from /to","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"event /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":29}},{"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":"yucongkoo"},"content":"cd \"..\"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"# Run the Gradle build to compile the code along with dependencies","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"./gradlew build","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"# Check if the Gradle build succeeded","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"if [ $? -ne 0 ]; then","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"# Run the program, feed commands from input.txt file, and redirect the output to ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":"./gradlew run \u003c text-ui-test/input.txt \u003e text-ui-test/ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"cd \"./text-ui-test\"","lastModifiedDate":"2023-08-27"},{"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":{"yucongkoo":11,"-":33}}] +[{"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":"yucongkoo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yucongkoo":18,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"# User Guide for Orion","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"### Managing your tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"Users can add tasks of 3 kinds,\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"a TODO task that contains a description,\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"a DEADLINE task that contains a description and a deadline,\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"an EVENT task that contains a description, an event start date and an event end date.","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"Users can also delete tasks if the task is no longer relevant.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"### Finding your tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"Users can find tasks using its description(or partial description) effectively.","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"### `list` - List out all your tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"Orion will list out all your tasks that is being tracked by Orion.","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"`list`","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"1.[T][ ] play","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"2.[D][ ] submit homework (by: Aug 9 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":"3.[E][X] attend hackathon (from: Aug 10 2023 to: Aug 11 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":"### `mark` - Mark your task as done.","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":"Orion will mark your task specified by its index(1-indexed) as done.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"`mark \u003cindex of task to be marked\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":"Example of usage:\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"`mark 1`","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" [T][X] play","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"### `unmark` - Mark your task as done.","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":"Orion will mark your task specified by its index(1-indexed) as done.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":"`unmark \u003cindex of task to be unmarked\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":"`unmark 3`","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" [E][ ] attend hackathon (from: Aug 10 2023 to: Aug 11 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":"### `todo` - Add a TODO task.","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":"Orion will add a TODO task with the given description.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":"`todo \u003cdescription of your TODO task\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":"`todo I am adding a TODO`","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" [T][ ] I am adding a TODO","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":"Now you have 4 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":"### `deadline` - Add a DEADLINE task.","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":"Orion will add a DEADLINE task with the given description and deadline.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":"`deadline \u003cdescription\u003e /by \u003cdeadline in the format yyyy-mm-dd\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":93,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":"`deadline submission /by 2023-05-05`","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":97,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" [D][ ] submission (by: May 5 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":"Now you have 5 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":"### `event` - Add an EVENT task.","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":"Orion will add an EVENT task with the given description, event start date and event end date.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":"`event \u003cdescription\u003e /from \u003cstart date in the format yyyy-mm-dd\u003e /to \u003cend date in the format yyyy-mm-dd\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":"`event attend carnival /from 2023-05-06 /to 2023-05-08`","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" [E][ ] attend carnival (from: May 6 2023 to: May 8 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":"Now you have 6 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":"### `delete` - Delete a task.","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":"Orion will delete the task specified by its index(1-indexed).\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":"`delete \u003cindex of task to be deleted\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":"Example of usage:\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":"`delete 2`","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":"Noted! I\u0027ve removed this task:","lastModifiedDate":"2023-09-14"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":" [D][ ] submit homework (by: Aug 9 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":"Now you have 5 tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":137,"author":{"gitId":"yucongkoo"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":138,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":139,"author":{"gitId":"yucongkoo"},"content":"### `find` - Find a task.","lastModifiedDate":"2023-09-14"},{"lineNumber":140,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":141,"author":{"gitId":"yucongkoo"},"content":"Orion will find a task using the given description and wil return the list of tasks that has matched or partially matched the description.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":142,"author":{"gitId":"yucongkoo"},"content":"`find \u003cdescription to be searched\u003e`","lastModifiedDate":"2023-09-14"},{"lineNumber":143,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":144,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":145,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":146,"author":{"gitId":"yucongkoo"},"content":"`find attend`","lastModifiedDate":"2023-09-14"},{"lineNumber":147,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":148,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":150,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":151,"author":{"gitId":"yucongkoo"},"content":"Here are the matching tasks in your list:","lastModifiedDate":"2023-09-14"},{"lineNumber":152,"author":{"gitId":"yucongkoo"},"content":"2.[E][X] attend hackathon (from: Aug 10 2023 to: Aug 11 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":153,"author":{"gitId":"yucongkoo"},"content":"5.[E][ ] attend carnival (from: May 6 2023 to: May 8 2023)","lastModifiedDate":"2023-09-14"},{"lineNumber":154,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-14"},{"lineNumber":155,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":156,"author":{"gitId":"yucongkoo"},"content":"### `bye` - Quits the application.","lastModifiedDate":"2023-09-14"},{"lineNumber":157,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":158,"author":{"gitId":"yucongkoo"},"content":"Orion will quit the application and close the window.\u003cbr\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":159,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":160,"author":{"gitId":"yucongkoo"},"content":"Example of usage:","lastModifiedDate":"2023-09-14"},{"lineNumber":161,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":162,"author":{"gitId":"yucongkoo"},"content":"`bye`","lastModifiedDate":"2023-09-14"},{"lineNumber":163,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":164,"author":{"gitId":"yucongkoo"},"content":"Expected outcome:","lastModifiedDate":"2023-09-14"},{"lineNumber":165,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"yucongkoo"},"content":"The application window will close.","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"yucongkoo":137,"-":29}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a command that can be executed, performing specific tasks when doing so.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" * Checks whether this command is an exit command.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * @return True if command is exit command.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * Executes this command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param taskManager The task manager that modifies the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" * @param diskManager The disk manager that handles updating data in local disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException When something went wrong during execution.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public abstract String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":26}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" * Represents a deadline command where when executed, adds a task with deadline to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * Constructs a DeadlineCommand object using a description and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" * @param description The description for the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param deadline The deadline for the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public DeadlineCommand(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"description of deadline command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" assert this.deadline !\u003d null : \"deadline of deadline command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.addTask(new Deadline(description, deadline));","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof DeadlineCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" DeadlineCommand temp \u003d (DeadlineCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" return temp.deadline.equals(this.deadline) \u0026\u0026 temp.description.equals(this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":52}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a delete command where when executed, deletes the specific task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Constructs the DeleteCommand using the 1-indexed index.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param index The index of task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.deleteTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof DeleteCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" DeleteCommand temp \u003d (DeleteCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return temp.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":43}},{"path":"src/main/java/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents an empty command that does nothing.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class EmptyCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException{","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! You forgot to input the command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" return other instanceof EmptyCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":25}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" * Represents an event command where when executed, adds a task with a start and end to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * Constructs an EventCommand using the description, start date and end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param description The description to the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" * @param start The start date.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" * @param end The end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public EventCommand(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"description of event command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" assert this.start !\u003d null : \"start date of event command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" assert this.end !\u003d null : \"end date of event command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.addTask(new Event(description, start, end));","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" private boolean hasSamePeriod(EventCommand other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" return this.start.equals(other.start)","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" \u0026\u0026 this.end.equals(other.end);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" private boolean hasSameDescription(EventCommand other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" return this.description.equals(other.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof EventCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" EventCommand temp \u003d (EventCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" return this.hasSameDescription(temp)","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" \u0026\u0026 this.hasSamePeriod(temp);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":65}},{"path":"src/main/java/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" * Represents an exit command where when executed, exits the application.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" return other instanceof ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":24}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a find command where when executed,","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" * finds all task that matches the string pattern.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" private String pattern;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" * Constructs a FindCommand with the input.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * @param pattern The pattern to find.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" public FindCommand(String pattern) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" this.pattern \u003d pattern;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" assert this.pattern !\u003d null : \"pattern of find command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" return taskManager.find(pattern);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof FindCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" FindCommand temp \u003d (FindCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" return temp.pattern.equals(this.pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"yucongkoo":43}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" * Represents a list command where when executed, prints the list of current tasks to the ui.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" return taskManager.listTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" return other instanceof ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":25}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents a mark command where when executed, marks the specified task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Constructs a MarkCommand using the 1-indexed index.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.markTask(index, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof MarkCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" MarkCommand temp \u003d (MarkCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return temp.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":42}},{"path":"src/main/java/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" * Represents a to-do command where when executed, adds a to-do task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" * Constructs a TodoCommand with the description provided.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param description The description of the task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"description of todo command should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.addTask(new Todo(description));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof TodoCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" TodoCommand temp \u003d (TodoCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return temp.description.equals(this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":44}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.DiskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import duke.TaskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents an unmark command where when executed, marks the specific task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Constructs an UnmarkCommand using the 1-indexed index.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" public String execute(TaskManager taskManager, DiskManager diskManager) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" String res \u003d taskManager.markTask(index, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" diskManager.saveToDisk(taskManager);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" if (other instanceof UnmarkCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" UnmarkCommand temp \u003d (UnmarkCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return temp.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":42}},{"path":"src/main/java/duke/DiskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.core.JsonProcessingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.databind.jsontype.NamedType;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import java.io.*;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Represents the disk manager which handles operation related to disk storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"public class DiskManager {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" private static final ObjectMapper MAPPER \u003d new ObjectMapper();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" static {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerSubtypes(new NamedType(Todo.class, \"Todo\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerSubtypes(new NamedType(Deadline.class, \"Deadline\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerSubtypes(new NamedType(Event.class, \"Event\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" MAPPER.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" private String directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" private String fileName;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" * Constructs a DiskManager with a directory path and file name, all storage operation","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" * will then operate on the file path specified.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" * @param directoryPath The path to the directory of the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" * @param fileName The file name of the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public DiskManager(String directoryPath, String fileName) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" private File getFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" String filePath \u003d directoryPath + \"/\" + fileName;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" String currentWorkingDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" // create a file object for the directory","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" File directory \u003d new File(currentWorkingDir, directoryPath);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" // If the directory does not exist, create it","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" // Create a File object for the file within the directory","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" File file \u003d new File(currentWorkingDir, filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" // If the file doesn\u0027t exist, create a new one","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" assert file !\u003d null : \"file returned by getFile() should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" return file;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" private String taskManagerToJson(TaskManager taskManager) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" assert taskManager !\u003d null : \"taskManager should not be null when converting to JSON format\";","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" return MAPPER.writeValueAsString(taskManager);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" } catch (JsonProcessingException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when saving task list to local disk.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" * Saves the task manager that encapsulates the task list to the disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" * @param taskManager The task manager to be saved to disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If taskManager could not be serialized into json or FileWriter failed to write to the disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":" public void saveToDisk(TaskManager taskManager) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" assert taskManager !\u003d null : \"taskManager should not be null when saving to disk\";","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":" String json \u003d taskManagerToJson(taskManager);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" File file \u003d getFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" fileWriter.write(json);","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when writing to local disk.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":" * Loads data from the disk and returns the task manager encapsulating the data.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" * @return The task manager.","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If could not read file from disk or could not deserialize the data read from disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":" public TaskManager loadFromDisk() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":" File file \u003d getFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" // read the file","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" StringBuilder jsonData \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":" String line;","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" while (true) {","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":" if (line \u003d\u003d null) {","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":" jsonData.append(line);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" String json \u003d jsonData.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" if (json.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" return new TaskManager();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" TaskManager taskManager \u003d MAPPER.readValue(json, TaskManager.class);","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" assert taskManager !\u003d null : \"taskManger loaded from disks should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":" return taskManager;","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" } catch (JsonProcessingException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when deserializing file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Error when reading file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"yucongkoo":131}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Represents the command line application Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class Duke {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" private DiskManager diskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" private TaskManager taskManager;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private Stage stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * Constructs Duke with the directory path and file name that specifies the filepath","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * of data Duke should run on.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" * @param directoryPath The directory path.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" * @param fileName The file name.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public Duke(String directoryPath, String fileName, Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" this.diskManager \u003d new DiskManager(directoryPath, fileName);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" this.taskManager \u003d this.diskManager.loadFromDisk();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" this.taskManager \u003d new TaskManager();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" assert this.stage !\u003d null : \"stage of Duke instance should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" assert this.taskManager !\u003d null : \"taskManager of Duke instance should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" assert this.diskManager !\u003d null : \"diskManager of Duke instance should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" * Executes the respective input received from Ui.","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" * @param input The input received from Ui.","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" * @return The string output to be printed to Ui.","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" public String execute(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" Command c \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" stage.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" String res \u003d c.execute(taskManager, diskManager);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" return res;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":57}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":" * Represents an exception that will be thrown by Duke operations.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" * Constructs the Duke Exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * @param errMsg The error message that is supposed to be printed into the command line.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public DukeException(String errMsg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" super(errMsg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":15}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" assert stage !\u003d null : \"stage should not be null when starting an application on javaFx\";","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" stage.setTitle(\"Orion\");","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" Duke duke \u003d new Duke(\"data\", \"tasks.json\", stage);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":32}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import command.EmptyCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import command.EventCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import command.ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import command.FindCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import command.ListCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"import command.TodoCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"import task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"import task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" * Represents a parser class that will be in charge of parsing user commands","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" * for Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_BYE \u003d \"bye\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_LIST \u003d \"list\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_MARK \u003d \"mark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_TODO \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_EVENT \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" private static final String FLAG_FIND \u003d \"find\";","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" * Parses the input passed in and return the respective command.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" * @return The command represented by input.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If the command format is invalid or unrecognized.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" public static Command parseCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" input \u003d input.trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" // skip past empty lines","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" String[] parts \u003d input.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" String command \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" String value \u003d parts.length \u003e\u003d 2 ? parts[1].trim() : \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" switch (command) {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" case FLAG_BYE:","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" return parseByeCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" case FLAG_LIST:","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" return parseListCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" case FLAG_MARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" return parseMarkCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" case FLAG_UNMARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" return parseUnmarkCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" case FLAG_TODO:","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" return parseTodoCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" case FLAG_DEADLINE:","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" return parseDeadlineCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" case FLAG_EVENT:","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" return parseEventCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" case FLAG_DELETE:","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" return parseDeleteCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" case FLAG_FIND:","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" return parseFindCommand(value);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" private static Command parseByeCommand(String value) throws DukeException{","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" if (!value.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The bye command should not be followed by any description\");","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" private static Command parseListCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" if (!value.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The list command should not be followed by any description\");","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" private static Command parseMarkCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":" Scanner tempSc \u003d new Scanner(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":" if (!tempSc.hasNextInt()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a mark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":" int index \u003d tempSc.nextInt();","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" if (tempSc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":" // means invalid formatting for done command","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a mark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":" private static Command parseUnmarkCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" Scanner tempSc \u003d new Scanner(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" if (!tempSc.hasNextInt()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of an unmark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":" int index \u003d tempSc.nextInt();","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" if (tempSc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" // means invalid formatting for done command","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of an unmark command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":" private static Command parseTodoCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"yucongkoo"},"content":" if (value.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The description of a todo task cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":" return new TodoCommand(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"yucongkoo"},"content":" private static Command parseDeadlineCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":140,"author":{"gitId":"yucongkoo"},"content":" String[] tempParts \u003d value.split(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"yucongkoo"},"content":" // did not provide the /by argument","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"yucongkoo"},"content":" if (tempParts.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! You forgot to provide a deadline for the deadline task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"yucongkoo"},"content":" String taskName \u003d tempParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"yucongkoo"},"content":" String deadline \u003d tempParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"yucongkoo"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The description of a deadline task cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"yucongkoo"},"content":" if (deadline.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! You forgot to provide a deadline for the deadline task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"yucongkoo"},"content":" LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"yucongkoo"},"content":" date \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"yucongkoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!! the date format of deadline is incorrect, \"","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"yucongkoo"},"content":" + \"please use the format yyyy-mm-dd\");","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"yucongkoo"},"content":" return new DeadlineCommand(taskName, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"yucongkoo"},"content":" private static Command parseEventCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":168,"author":{"gitId":"yucongkoo"},"content":" String[] tempParts \u003d value.split(\"/from|/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"yucongkoo"},"content":" // did not provide the /from /to arguments","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"yucongkoo"},"content":" if (tempParts.length \u003c 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Please provide a proper period for the event task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"yucongkoo"},"content":" String taskName \u003d tempParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"yucongkoo"},"content":" String start \u003d tempParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"yucongkoo"},"content":" String end \u003d tempParts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"yucongkoo"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! The description of an event task cannot be empty\");","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"yucongkoo"},"content":" if (start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Please provide a proper period for the event task\");","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"yucongkoo"},"content":" LocalDate startDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"yucongkoo"},"content":" LocalDate endDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"yucongkoo"},"content":" startDate \u003d LocalDate.parse(start);","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"yucongkoo"},"content":" endDate \u003d LocalDate.parse(end);","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"yucongkoo"},"content":" if (endDate.isBefore(startDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! End date of an event should \"","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"yucongkoo"},"content":" + \"not be earlier than the start date.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"yucongkoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!! the date format of event is incorrect, \"","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"yucongkoo"},"content":" + \"please use the format yyyy-mm-dd\");","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"yucongkoo"},"content":" return new EventCommand(taskName, startDate, endDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":200,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"yucongkoo"},"content":" private static Command parseDeleteCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":203,"author":{"gitId":"yucongkoo"},"content":" Scanner tempSc \u003d new Scanner(value);","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"yucongkoo"},"content":" if (!tempSc.hasNextInt()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a delete command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"yucongkoo"},"content":" int index \u003d tempSc.nextInt();","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"yucongkoo"},"content":" if (tempSc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"yucongkoo"},"content":" // means invalid formatting for done command","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Invalid argument of a delete command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"yucongkoo"},"content":" tempSc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"yucongkoo"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"yucongkoo"},"content":" private static Command parseFindCommand(String value) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":221,"author":{"gitId":"yucongkoo"},"content":" if (value.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":222,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Oops!!! Please provide an input to find\");","lastModifiedDate":"2023-08-28"},{"lineNumber":223,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":224,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":225,"author":{"gitId":"yucongkoo"},"content":" return new FindCommand(value);","lastModifiedDate":"2023-08-28"},{"lineNumber":226,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":227,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"yucongkoo":227}},{"path":"src/main/java/duke/TaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * Represents a task manager that helps manage the list of tasks for Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"public class TaskManager {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" /** Constructs a TaskManager with empty task list. */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" public TaskManager() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" return this.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" public void setTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" * Lists the tasks in order.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" * @return The string representation of the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public String listTasks() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" return \"There are no tasks in your list.\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); ++i) {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" String item \u003d (i + 1) + \".\" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" sb.append(item);","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" return sb.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" * Adds a task to the end of the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" * @return The string description after adding the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" return \"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" * Marks the i-th task as either done or not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" * @param i The index of the task in the list(1-indexed).","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" * @param done Whether to mark the task as done or not.","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" * @return The String description after marking the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" public String markTask(int i, boolean done) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" i--;","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" if (i \u003c 0 || i \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" // invalid index","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Please input a valid index for the task to marked/unmarked\");","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" Task task \u003d this.tasks.get(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" task.markTask(done);","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":" return done","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" ? \"Nice! I\u0027ve marked this task as done:\\n \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" : \"OK, I\u0027ve marked this task as not done yet:\\n \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" * Deletes the i-th task from the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" * @param i The index of the task to be deleted(1-indexed).","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" * @return The string description after deleting the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":" public String deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" i--;","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":" if (i \u003c 0 || i \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" // invalid index","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":" throw new DukeException(\"Please input a valid index for the task to removed\");","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" Task task \u003d this.tasks.remove(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" return \"Noted! I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" + \"Now you have \" + this.tasks.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" * Finds the tasks that has description that matches the pattern.","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" * @param pattern The pattern to be matched.","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":" * @return The string representation of task found.","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" public String find(String pattern) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":" sb.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); ++i) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" if (t.descriptionContains(pattern)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":" isFound \u003d true;","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" sb.append(i + 1 + \". \");","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":" sb.append(t);","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":" sb.append(\u0027\\n\u0027);","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" return isFound ? sb.toString() : \"There is no task that matched.\";","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"yucongkoo"},"content":" sb.append(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":136}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"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":21,"author":{"gitId":"yucongkoo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"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":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":62}},{"path":"src/main/java/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userImg.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/botImg.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" // greet the users","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" String greetings \u003d \"Hello! I\u0027m Orion\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(greetings, dukeImage));","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"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":48,"author":{"gitId":"yucongkoo"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" * Executes the input command using duke.","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" * @return The response message by duke.","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" return duke.execute(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":70}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" * Constructs a Deadline Task using the task name and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * @param taskName The task name of the constructed Deadline Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * @param deadline The deadline of the constructed Deadline Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public Deadline(@JsonProperty(\"taskName\") String taskName, @JsonProperty(\"deadline\") LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" public LocalDate getDeadline() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" return this.deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" public void setDeadline(LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" assert this.deadline !\u003d null : \"deadline should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" private String getFormattedDeadline() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" return this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + getFormattedDeadline() + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":45}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" * Constructs an Event Task using the task name, start date and end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" * @param taskName The task name for the constructed.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" * @param start The start of the period for the constructed event.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" * @param end The end of the period for the constructed event.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" public Event(@JsonProperty(\"taskName\") String taskName","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" , @JsonProperty(\"start\") LocalDate start, @JsonProperty(\"end\") LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" public LocalDate getStart() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" return start;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public LocalDate getEnd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" return end;","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" public void setStart(LocalDate start) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" assert this.start !\u003d null : \"start date of an Event should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" public void setEnd(LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" assert this.end !\u003d null : \"end date of an Event should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" private String getFormattedDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" + \" (from: \" + getFormattedDate(this.start)","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" + \" to: \" + getFormattedDate(this.end) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":58}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":" * Represents an abstract task class.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"@JsonTypeInfo(use \u003d JsonTypeInfo.Id.NAME, include \u003d JsonTypeInfo.As.PROPERTY)","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" @JsonSubTypes.Type(value \u003d Todo.class, name \u003d \"Todo\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"Deadline\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"Event\")","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"})","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" * Constructs a Task with a task name.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" * @param description The name of the constructed task.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" public Task(@JsonProperty(\"description\") String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" return description;","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" return isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" assert this.description !\u003d null : \"task description should not be null\";","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" public void setDone(boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" * Marks this task as done or not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" * @param done Whether the task is done or not","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" public void markTask(boolean done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" char marked \u003d \u0027X\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" return \"[\" + (isDone ? marked : \" \") + \"] \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" * Finds whether the description has the pattern in it.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" * @param pattern The pattern to be matched.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" * @return True if pattern is found in description.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" public boolean descriptionContains(String pattern) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" int pos \u003d this.description.indexOf(pattern);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" return pos \u003e\u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":74}},{"path":"src/main/java/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":" * Represents a to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" * Constructs a to-do Task with taskName.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" * @param taskName the task name of the to-do task","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" @JsonCreator","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" public Todo(@JsonProperty(\"taskName\") String taskName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":24}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" 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-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" \u003cLabel HBox.hgrow\u003d\"ALWAYS\" fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" \u003cRegion HBox.hgrow\u003d\"NEVER\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" \u003c/Region\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"70\" fitWidth\u003d\"70\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" \u003cCircle radius\u003d\"35.0\" centerX\u003d\"35.0\" centerY\u003d\"35.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":28}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"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-02"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"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-02"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"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":14,"author":{"gitId":"yucongkoo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yucongkoo":19}},{"path":"src/test/java/duke/DiskManagerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"public class DiskManagerTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadDummyFile_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" String expected \u003d \"[T][ ] play[D][ ] play (by: Aug 9 2023)[E][X] play (from: Apr 4 2023 to: May 5 2023)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" assertEquals(expected,","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" new DiskManager(\"src/test/resources\", \"tasks.json\")","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" .loadFromDisk().toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadCorruptedFile_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":" new DiskManager(\"src/test/resources\", \"tasks_corrupted.json\").loadFromDisk();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Error when deserializing file\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadEmptyFile_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"\", new DiskManager(\"src/test/resources\", \"tasks_empty.json\")","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":" .loadFromDisk().toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" public void loadFromDisk_loadNonExistingFile_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" String filePath \u003d \"src/test/resources/dummy.json\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" file.delete();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"\", new DiskManager(\"src/test/resources\", \"dummy.json\")","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" .loadFromDisk().toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yucongkoo":46}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"import command.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_emptyString_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new EmptyCommand(), Parser.parseCommand(\"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_spaces_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new EmptyCommand(), Parser.parseCommand(\" \"));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_byeCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\"bye\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_byeCommandWithspace_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\" bye \"));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_byeCommandWithArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"bye 45\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The bye command should not be followed by any description\"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_listCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new ListCommand(), Parser.parseCommand(\"list\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_listCommandWithArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"list 123\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The list command should not be followed by any description\"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_markCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new MarkCommand(1), Parser.parseCommand(\"mark 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_markCommandWithNonInteger_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"mark sh\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a mark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_markCommandWithMultipleArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"mark 1 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a mark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unmarkCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new UnmarkCommand(1), Parser.parseCommand(\"unmark 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unmarkCommandWithNonInteger_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"unmark sh\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of an unmark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unmarkCommandWithMultipleArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"unmark 1 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of an unmark command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_todoCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new TodoCommand(\"test\"), Parser.parseCommand(\"todo test\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_todoCommandWithoutDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"todo \");","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The description of a todo task cannot be empty\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new DeadlineCommand(\"test\", LocalDate.of(2023, 8, 8))","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"yucongkoo"},"content":" , Parser.parseCommand(\"deadline test /by 2023-08-08\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWithoutArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline \");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! You forgot to provide a deadline for the deadline task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWithEmptyDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline /by 2023-08-08\");","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The description of a deadline task cannot be empty\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWithEmptyDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline test /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! You forgot to provide a deadline for the deadline task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deadlineCommandWitInvalidDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"deadline test /by 2023/04/12\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!! the date format of deadline is incorrect\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"yucongkoo"},"content":" \", please use the format yyyy-mm-dd\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new EventCommand(\"test\"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"yucongkoo"},"content":" , LocalDate.of(2023, 8, 8)","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"yucongkoo"},"content":" , LocalDate.of(2023, 9, 9))","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"yucongkoo"},"content":" , Parser.parseCommand(\"event test /from 2023-08-08 /to 2023-09-09\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event \");","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutFrom_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutTo_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /from 2023-08-08\");","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithEmptyTo_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /from /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide a proper period for the event task\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithoutDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event /from 2023-08-08 /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! The description of an event task cannot be empty\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithInvalidDateRange_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event test /from 2023-09-10 /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! End date of an event should not be earlier than the start date.\"","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithInvalidFromDate_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event test /from 2023/10/10 /to 2023-09-09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!! the date format of event is incorrect\"","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"yucongkoo"},"content":" + \", please use the format yyyy-mm-dd\"","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_eventCommandWithInvalidToDate_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"event test /from 2023-10-10 /to 2023/09/09\");","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!! the date format of event is incorrect\"","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"yucongkoo"},"content":" + \", please use the format yyyy-mm-dd\"","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deleteCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new DeleteCommand(1), Parser.parseCommand(\"delete 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deleteCommandWithNonInteger_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"delete sh\");","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a delete command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_deleteCommandWithMultipleArguments_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"delete 1 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Invalid argument of a delete command\"","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_findCommand_success() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"yucongkoo"},"content":" assertEquals(new FindCommand(\"test\"), Parser.parseCommand(\"find test\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_findCommandWithoutDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"find \");","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! Please provide an input to find\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"yucongkoo"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"yucongkoo"},"content":" public void parseCommand_unrecognisedCommand_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"yucongkoo"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"yucongkoo"},"content":" Parser.parseCommand(\"blah\");","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"yucongkoo"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"yucongkoo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":317,"author":{"gitId":"yucongkoo"},"content":" assertEquals(\"Oops!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-08-30"},{"lineNumber":318,"author":{"gitId":"yucongkoo"},"content":" , e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":319,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":320,"author":{"gitId":"yucongkoo"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":321,"author":{"gitId":"yucongkoo"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yucongkoo":321}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yucongkoo"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yucongkoo"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yucongkoo"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yucongkoo"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yucongkoo"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yucongkoo"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yucongkoo"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yucongkoo"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yucongkoo"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yucongkoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yucongkoo"},"content":"bye 123","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yucongkoo"},"content":"list 123","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yucongkoo"},"content":"mark 1 1","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yucongkoo"},"content":"mark 12","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"mark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"deadline return book /by","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"deadline /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yucongkoo"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yucongkoo"},"content":"event project meeting","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yucongkoo"},"content":"event project meeting /from /to","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yucongkoo"},"content":"event /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yucongkoo":29}},{"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":"yucongkoo"},"content":"cd \"..\"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"yucongkoo"},"content":"# Run the Gradle build to compile the code along with dependencies","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"yucongkoo"},"content":"./gradlew build","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"yucongkoo"},"content":"# Check if the Gradle build succeeded","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"yucongkoo"},"content":"if [ $? -ne 0 ]; then","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"yucongkoo"},"content":"# Run the program, feed commands from input.txt file, and redirect the output to ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"yucongkoo"},"content":"./gradlew run \u003c text-ui-test/input.txt \u003e text-ui-test/ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"yucongkoo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"yucongkoo"},"content":"cd \"./text-ui-test\"","lastModifiedDate":"2023-08-27"},{"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":{"yucongkoo":11,"-":33}}] diff --git a/yucongkoo_ip_master/commits.json b/yucongkoo_ip_master/commits.json index 26b867ef..a552971e 100644 --- a/yucongkoo_ip_master/commits.json +++ b/yucongkoo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yucongkoo":[{"date":"2023-08-24","commitResults":[{"hash":"c169e3d1479d9d0cc48783eb4d84dcd644b3d18a","isMergeCommit":false,"messageTitle":"Implementation of Level-0 features","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"21c4efc1b429e8e044d19fea4c7d1b08ff99adc4","isMergeCommit":false,"messageTitle":"Implementation of Level-1 features","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"51429b733860e1973937a5d7ce2feaef43d79326","isMergeCommit":false,"messageTitle":"Implementation of Level-2 features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":1}}},{"hash":"4f284528ae0dd8862a9c51ac3690bfd2f340e8e3","isMergeCommit":false,"messageTitle":"Implementation of Level-3 features","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":10}}},{"hash":"92bf315368a3cd9106fb6598b6c6a11e23b61fa2","isMergeCommit":false,"messageTitle":"Implementation of Level-4 features","messageBody":"","tags":["Level-5","Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":212,"deletions":3}}},{"hash":"9f4a313ca3d606c75a34c116c7ad6fd0817bfe24","isMergeCommit":false,"messageTitle":"Implementation of Level-6 features","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"32faf463cfa1e38937d9acaa041a2b5734a5f135","isMergeCommit":false,"messageTitle":"Implementation of A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":29,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"40c76a97adf2107993da4c9916bb902fcf132404","isMergeCommit":false,"messageTitle":"Functionality of getting target file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"5f5e784da67dd71f4e927607798a13b6bfa60915","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/yucongkoo/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"cd6a89ba0321e2371e332c6bf301bb88eb216672","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branh-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"407be0a977a38c257e7703a7f0b03bb0afe55bc9","isMergeCommit":false,"messageTitle":"Add Level-7 features","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":99,"deletions":42}}},{"hash":"91430accf9325eac24093825ef1b7e17815ebcfb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branh-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f371ae28bd037b5889e0e6f6f8b056c95f3e4847","isMergeCommit":false,"messageTitle":"Add DiskManager","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"d3e3cdefc2e0db5a6521d7c3554f09814d8e0673","isMergeCommit":false,"messageTitle":"Add level-8 features","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":56,"deletions":15}}},{"hash":"57810b19de689257237cccc6738d6ac3a0c77497","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"8fef3e1b27bff6bc2656b5db194b067187604d4a","isMergeCommit":false,"messageTitle":"Add A-MoreOOP feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":566,"deletions":264}}},{"hash":"0608b458a14a287575f2b511bfb3ffc7d9bb599c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e0955c847834837515a798f4360320adda8eb7d7","isMergeCommit":false,"messageTitle":"Add A-Gradle features","messageBody":"Added gradle support to run the application.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"aa57206c8915629001f8d2107a91c4ac646654b3","isMergeCommit":false,"messageTitle":"Update the runtest.sh script to use gradle commands","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":11,"deletions":5}}}]},{"date":"2023-08-28","commitResults":[{"hash":"25252629a2cbdedbbe8f457f8b08f642290dd2eb","isMergeCommit":false,"messageTitle":"Add error handling when saving to local disk","messageBody":"Previously did not handle error when saving to local disk\n\nUnexpected values will be printed\n\nLets add error handling so the application can handle such errors\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":8}}},{"hash":"970fd80db9e52b0b4d4338e720b97a9e24b83c7f","isMergeCommit":false,"messageTitle":"Add A-JavaDoc features","messageBody":"Added javadoc to all public method and classes.\n","fileTypesAndContributionMap":{"java":{"insertions":157,"deletions":80}}},{"hash":"49553239d03a331db617e3cd35d9dc84c622462d","isMergeCommit":false,"messageTitle":"Add A-CodingStandard features","messageBody":"Tweaked code to follow coding standards\n","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":17}}},{"hash":"fee38587985c054105b1b198bab887a5280f5219","isMergeCommit":false,"messageTitle":"Add Level-9 features.","messageBody":"Implemented the find command to match certain patterns in task list.\n","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"47db049840c7a6ab15c4beb11f9cb2a7cf2337b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"4bcff87a0d958bfbb23f17f082317932d9ab220b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"afe82a2d1c721b1e650fc774fb71bba87eb4857c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"cf6a012705992cc6a34f228cc1a97ba5d8f002f7","isMergeCommit":false,"messageTitle":"Remove unicode characters","messageBody":"Removed unicode characters since displaying them is inconsistent\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"0286313cd5c8f2c1a5fddbd9bbec37852405e9a2","isMergeCommit":false,"messageTitle":"Add Test file","messageBody":"Added dummy test file, unable to import junit\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c049981094f17c7faa673a71e0811866896815bc","isMergeCommit":false,"messageTitle":"Add JUnit test for loadFromDisk method in DiskManager","messageBody":"Added Junit test to test the loadFromDisk method extensively.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":0}}},{"hash":"337b56288063e879e863b30d01d5daf846349a36","isMergeCommit":false,"messageTitle":"Add JUnit test for parseCommand method in Parser","messageBody":"Added Junit test to test the parseCommand method extensively.\n","fileTypesAndContributionMap":{"java":{"insertions":405,"deletions":9}}},{"hash":"13fe14dca6e6348a020086fc306ed3ea41cc1982","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"f4b6f8ad42789e7dfdd84675c096eae910f3176b","isMergeCommit":false,"messageTitle":"Implement framework for GUI","messageBody":"Followed the tutorial to implement the skeleton for GUI\n","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":33,"deletions":0},"java":{"insertions":186,"deletions":0}}},{"hash":"11a1da8471467670fd30ddbd0528325df7b7cc03","isMergeCommit":false,"messageTitle":"Add Level-10 features","messageBody":"Added features for level 10 incremenet for basic functioning gui\n","fileTypesAndContributionMap":{"fxml":{"insertions":13,"deletions":11},"java":{"insertions":48,"deletions":151}}},{"hash":"5e205c1d6f03cda26824befb239f1448ef7caca3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"02f66942641d298d08369d5de3642083d474a3ba","isMergeCommit":false,"messageTitle":"Add trivial stuff","messageBody":"Added some trivial stuff such as adding title and setting main class for gradle\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":7,"deletions":0}}},{"hash":"6af6667e90c1023c8a79f35d3504883a7a0ef5aa","isMergeCommit":false,"messageTitle":"Add styling to GUI","messageBody":"Added some styling to the GUI\n","fileTypesAndContributionMap":{"fxml":{"insertions":16,"deletions":4}}}]},{"date":"2023-09-06","commitResults":[{"hash":"0a50dbb3c17d5b3fbca56bd856571a8781e746f5","isMergeCommit":false,"messageTitle":"Add assertions to DiskManager","messageBody":"There are several methods in DiskManager that made assumptions to\ncertain values.\n\nUsing assertions to ensure such values fulfil its requirements guards the\nprogram from unexpected errors.\n\nLet\u0027s add assertions to these values.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":8}}},{"hash":"96bc7eb078b77400e409f09382627cad484950fb","isMergeCommit":false,"messageTitle":"Add assertions to remaining files","messageBody":"Added assertions to remaning files to guard our program from\nunexpected errors.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"621f0a896e717eb7d08d3d80950303aa0431530e","isMergeCommit":false,"messageTitle":"Refactor code to improve code quality","messageBody":"There are certain parts of the code that could be a little hard\nto understand the logic flow.\n\nRefactor code to improve the code quality, making the code\nmore readable and understandable.\n\nLet\u0027s refactor code segments that could be improved.\n","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"825877e4d90006f65c514596618259ea7ed4d0e2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yucongkoo/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"21956c622b1feab3cbefc976826b6990e2c120f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/yucongkoo/ip","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"ab048a274b0a24faaebb3f71dd3119123f7d37ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ce3697a5524f200034250d420dc2c23773eac7de","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yucongkoo/branch-A-CodeQuality","messageBody":"Refactor code to improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"6c937c25f87c42df53535aa8ba10ce449f1c3104","isMergeCommit":false,"messageTitle":"Add extension C-BetterSearch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"4f934aa72b4e28781274af3dd131d5464613ea86","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"975698458a85a59c4de453ea97a2940d2a590a3e","isMergeCommit":false,"messageTitle":"Refactor long code into multiple methods","messageBody":"Refactored code to follow coding qualities\n","fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":112}}},{"hash":"91ef342ccee16535ee983270603f7698b3526418","isMergeCommit":false,"messageTitle":"Fix regression caused by assertions","messageBody":"Fixed the regression caused by assertions, causing the\nloadFromDisk() method failing\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"994ddded028e2e32f9bfde816c41fc2cd40272e6","isMergeCommit":false,"messageTitle":"Fix Parser Bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a957231e4b88b29b70c260229562f5973f8dcbd7","isMergeCommit":false,"messageTitle":"Modify unit test test case","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"644123fe470dbcb8b1190aa9e95495a90dcdf0bf","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"Added user guide\n","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":147,"deletions":10}}},{"hash":"7bc965edfd96f4d12317114f68b2d53cfd65b733","isMergeCommit":false,"messageTitle":"Add product screenshot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"yucongkoo":{"java":1743,"md":137,"fxml":47,"sh":11,"bat":0,"gradle":18,"txt":29}},"authorContributionVariance":{"yucongkoo":54581.152},"authorDisplayNameMap":{"yucongkoo":"CS2103T-W16-2 KOO ..CONG"}} +{"authorDailyContributionsMap":{"yucongkoo":[{"date":"2023-08-24","commitResults":[{"hash":"c169e3d1479d9d0cc48783eb4d84dcd644b3d18a","isMergeCommit":false,"messageTitle":"Implementation of Level-0 features","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"21c4efc1b429e8e044d19fea4c7d1b08ff99adc4","isMergeCommit":false,"messageTitle":"Implementation of Level-1 features","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"51429b733860e1973937a5d7ce2feaef43d79326","isMergeCommit":false,"messageTitle":"Implementation of Level-2 features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":1}}},{"hash":"4f284528ae0dd8862a9c51ac3690bfd2f340e8e3","isMergeCommit":false,"messageTitle":"Implementation of Level-3 features","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":10}}},{"hash":"92bf315368a3cd9106fb6598b6c6a11e23b61fa2","isMergeCommit":false,"messageTitle":"Implementation of Level-4 features","messageBody":"","tags":["Level-5","Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":212,"deletions":3}}},{"hash":"9f4a313ca3d606c75a34c116c7ad6fd0817bfe24","isMergeCommit":false,"messageTitle":"Implementation of Level-6 features","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"32faf463cfa1e38937d9acaa041a2b5734a5f135","isMergeCommit":false,"messageTitle":"Implementation of A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":29,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"40c76a97adf2107993da4c9916bb902fcf132404","isMergeCommit":false,"messageTitle":"Functionality of getting target file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"5f5e784da67dd71f4e927607798a13b6bfa60915","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/yucongkoo/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"cd6a89ba0321e2371e332c6bf301bb88eb216672","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branh-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"407be0a977a38c257e7703a7f0b03bb0afe55bc9","isMergeCommit":false,"messageTitle":"Add Level-7 features","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":99,"deletions":42}}},{"hash":"91430accf9325eac24093825ef1b7e17815ebcfb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branh-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f371ae28bd037b5889e0e6f6f8b056c95f3e4847","isMergeCommit":false,"messageTitle":"Add DiskManager","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"d3e3cdefc2e0db5a6521d7c3554f09814d8e0673","isMergeCommit":false,"messageTitle":"Add level-8 features","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":56,"deletions":15}}},{"hash":"57810b19de689257237cccc6738d6ac3a0c77497","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"8fef3e1b27bff6bc2656b5db194b067187604d4a","isMergeCommit":false,"messageTitle":"Add A-MoreOOP feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":566,"deletions":264}}},{"hash":"0608b458a14a287575f2b511bfb3ffc7d9bb599c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e0955c847834837515a798f4360320adda8eb7d7","isMergeCommit":false,"messageTitle":"Add A-Gradle features","messageBody":"Added gradle support to run the application.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"aa57206c8915629001f8d2107a91c4ac646654b3","isMergeCommit":false,"messageTitle":"Update the runtest.sh script to use gradle commands","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":11,"deletions":5}}}]},{"date":"2023-08-28","commitResults":[{"hash":"25252629a2cbdedbbe8f457f8b08f642290dd2eb","isMergeCommit":false,"messageTitle":"Add error handling when saving to local disk","messageBody":"Previously did not handle error when saving to local disk\n\nUnexpected values will be printed\n\nLets add error handling so the application can handle such errors\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":8}}},{"hash":"970fd80db9e52b0b4d4338e720b97a9e24b83c7f","isMergeCommit":false,"messageTitle":"Add A-JavaDoc features","messageBody":"Added javadoc to all public method and classes.\n","fileTypesAndContributionMap":{"java":{"insertions":157,"deletions":80}}},{"hash":"49553239d03a331db617e3cd35d9dc84c622462d","isMergeCommit":false,"messageTitle":"Add A-CodingStandard features","messageBody":"Tweaked code to follow coding standards\n","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":17}}},{"hash":"fee38587985c054105b1b198bab887a5280f5219","isMergeCommit":false,"messageTitle":"Add Level-9 features.","messageBody":"Implemented the find command to match certain patterns in task list.\n","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"47db049840c7a6ab15c4beb11f9cb2a7cf2337b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"4bcff87a0d958bfbb23f17f082317932d9ab220b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"afe82a2d1c721b1e650fc774fb71bba87eb4857c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"cf6a012705992cc6a34f228cc1a97ba5d8f002f7","isMergeCommit":false,"messageTitle":"Remove unicode characters","messageBody":"Removed unicode characters since displaying them is inconsistent\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"0286313cd5c8f2c1a5fddbd9bbec37852405e9a2","isMergeCommit":false,"messageTitle":"Add Test file","messageBody":"Added dummy test file, unable to import junit\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c049981094f17c7faa673a71e0811866896815bc","isMergeCommit":false,"messageTitle":"Add JUnit test for loadFromDisk method in DiskManager","messageBody":"Added Junit test to test the loadFromDisk method extensively.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":0}}},{"hash":"337b56288063e879e863b30d01d5daf846349a36","isMergeCommit":false,"messageTitle":"Add JUnit test for parseCommand method in Parser","messageBody":"Added Junit test to test the parseCommand method extensively.\n","fileTypesAndContributionMap":{"java":{"insertions":405,"deletions":9}}},{"hash":"13fe14dca6e6348a020086fc306ed3ea41cc1982","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"f4b6f8ad42789e7dfdd84675c096eae910f3176b","isMergeCommit":false,"messageTitle":"Implement framework for GUI","messageBody":"Followed the tutorial to implement the skeleton for GUI\n","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":33,"deletions":0},"java":{"insertions":186,"deletions":0}}},{"hash":"11a1da8471467670fd30ddbd0528325df7b7cc03","isMergeCommit":false,"messageTitle":"Add Level-10 features","messageBody":"Added features for level 10 incremenet for basic functioning gui\n","fileTypesAndContributionMap":{"fxml":{"insertions":13,"deletions":11},"java":{"insertions":48,"deletions":151}}},{"hash":"5e205c1d6f03cda26824befb239f1448ef7caca3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"02f66942641d298d08369d5de3642083d474a3ba","isMergeCommit":false,"messageTitle":"Add trivial stuff","messageBody":"Added some trivial stuff such as adding title and setting main class for gradle\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":7,"deletions":0}}},{"hash":"6af6667e90c1023c8a79f35d3504883a7a0ef5aa","isMergeCommit":false,"messageTitle":"Add styling to GUI","messageBody":"Added some styling to the GUI\n","fileTypesAndContributionMap":{"fxml":{"insertions":16,"deletions":4}}}]},{"date":"2023-09-06","commitResults":[{"hash":"0a50dbb3c17d5b3fbca56bd856571a8781e746f5","isMergeCommit":false,"messageTitle":"Add assertions to DiskManager","messageBody":"There are several methods in DiskManager that made assumptions to\ncertain values.\n\nUsing assertions to ensure such values fulfil its requirements guards the\nprogram from unexpected errors.\n\nLet\u0027s add assertions to these values.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":8}}},{"hash":"96bc7eb078b77400e409f09382627cad484950fb","isMergeCommit":false,"messageTitle":"Add assertions to remaining files","messageBody":"Added assertions to remaning files to guard our program from\nunexpected errors.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"621f0a896e717eb7d08d3d80950303aa0431530e","isMergeCommit":false,"messageTitle":"Refactor code to improve code quality","messageBody":"There are certain parts of the code that could be a little hard\nto understand the logic flow.\n\nRefactor code to improve the code quality, making the code\nmore readable and understandable.\n\nLet\u0027s refactor code segments that could be improved.\n","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"825877e4d90006f65c514596618259ea7ed4d0e2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yucongkoo/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"21956c622b1feab3cbefc976826b6990e2c120f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/yucongkoo/ip","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"ab048a274b0a24faaebb3f71dd3119123f7d37ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ce3697a5524f200034250d420dc2c23773eac7de","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yucongkoo/branch-A-CodeQuality","messageBody":"Refactor code to improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"6c937c25f87c42df53535aa8ba10ce449f1c3104","isMergeCommit":false,"messageTitle":"Add extension C-BetterSearch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"4f934aa72b4e28781274af3dd131d5464613ea86","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"975698458a85a59c4de453ea97a2940d2a590a3e","isMergeCommit":false,"messageTitle":"Refactor long code into multiple methods","messageBody":"Refactored code to follow coding qualities\n","fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":112}}},{"hash":"91ef342ccee16535ee983270603f7698b3526418","isMergeCommit":false,"messageTitle":"Fix regression caused by assertions","messageBody":"Fixed the regression caused by assertions, causing the\nloadFromDisk() method failing\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"994ddded028e2e32f9bfde816c41fc2cd40272e6","isMergeCommit":false,"messageTitle":"Fix Parser Bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a957231e4b88b29b70c260229562f5973f8dcbd7","isMergeCommit":false,"messageTitle":"Modify unit test test case","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"644123fe470dbcb8b1190aa9e95495a90dcdf0bf","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"Added user guide\n","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":147,"deletions":10}}},{"hash":"7bc965edfd96f4d12317114f68b2d53cfd65b733","isMergeCommit":false,"messageTitle":"Add product screenshot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-18","commitResults":[{"hash":"dca8b3732ae033779a7afeb6e674f9376de8ed70","isMergeCommit":false,"messageTitle":"Resolve code quality issue","messageBody":"Resolved the code quality issues proposed by nus-se-script\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"yucongkoo":{"java":1741,"md":137,"fxml":47,"sh":11,"bat":0,"gradle":18,"txt":29}},"authorContributionVariance":{"yucongkoo":49394.848},"authorDisplayNameMap":{"yucongkoo":"CS2103T-W16-2 KOO ..CONG"}} diff --git a/yyyaohhh_ip_master/authorship.json b/yyyaohhh_ip_master/authorship.json index 59d79583..c8724731 100644 --- a/yyyaohhh_ip_master/authorship.json +++ b/yyyaohhh_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"# duke.duke project template","lastModifiedDate":"2023-09-13"},{"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":"yyyaohhh"},"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-13"},{"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":{"yyyaohhh":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":"yyyaohhh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"javafx {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"java {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" compileJava.options.encoding \u003d \u0027UTF-8\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":"checkstyle {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" mavenCentral()","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":"yyyaohhh"},"content":"test {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" mainClass.set(\"Duke.main.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":77,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yyyaohhh":35,"-":43}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"T | 1 | dne","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"T | 1 | jekj","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"yyyaohhh":2}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"import duke.Main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":12}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"public class Duke {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" //this duke is no longer used.","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" public Duke() {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" this(\"./data/duke.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"File not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" Parser executor \u003d new Parser();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" executor.parse(this.tasks, input);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" new FileWriter(\"./data/duke.txt\", false).close();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" this.storage.writeToFile(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"error: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":"// public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":"// new Duke(\"./data/duke.txt\").run();","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":"// }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yyyaohhh":40,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yyyaohhh":7}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":"// fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":31}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" //private Duke duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" private Ui ui;","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" private Storage storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" private Parser executor;","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gitar.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bocchi.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" this.executor \u003d new Parser();","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" this.storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"File not found\");","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":"// old duke is no longer used","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":"// public void setDuke(Duke d) {","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":"// duke \u003d d;","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":"// this.duke \u003d new Duke();","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":"// }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" new FileWriter(\"./data/duke.txt\", false).close();","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" this.storage.writeToFile(this.tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"error: \" + e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" return executor.parse(this.tasks, input);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":81}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" public String parse(TaskList tasks, String echo) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" while (!echo.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" if (!echo.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" String[] parts \u003d echo.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The number to be marked done... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" int taskNum \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" tasks.markDone(taskNum - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"O...Omedeto! I have... have marked this as done!!ヾ(*´▽‘*)ノ\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" + tasks.printTask(taskNum - 1) + \"\\n\" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The number to be unmarked done... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" int taskNum \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" tasks.markUndone(taskNum - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... this is not done yet ヘ(;´Д`ヘ)\" + tasks.printTask(taskNum - 1)","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" + \"\\n\" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" String removeDdl \u003d echo.replace(\"deadline\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" if (removeDdl.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The description of a deadline... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" String removeBy \u003d removeDdl.replace(\"by\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" String[] ddl \u003d removeBy.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" String[] split \u003d ddl[1].split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" LocalDate by \u003d LocalDate.parse(split[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" Deadline x \u003d new Deadline(ddl[0], by);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" tasks.addToList(x);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... I\u0027ve... I\u0027ve added this task:\\n\" + x.toString() + \"\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" + tasks.numOfTask() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"Th...th...the ddate you have inputed is invalid!!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" String removeEvent \u003d echo.replace(\"event\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" if (removeEvent.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The description of an event... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" String removeFrom \u003d removeEvent.replace(\"from\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" String removeTo \u003d removeFrom.replace(\"to\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" String[] event \u003d removeTo.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" Event x \u003d new Event(event[0], event[1], event[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" tasks.addToList(x);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... I\u0027ve... I\u0027ve added this task:\\n\" + x.toString() + \"\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" + tasks.numOfTask() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" String removeTodo \u003d echo.replace(\"todo\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" if (removeTodo.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The description of the todo... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"yyyaohhh"},"content":" ToDo x \u003d new ToDo(removeTodo);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"yyyaohhh"},"content":" tasks.addToList(x);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... I\u0027ve... I\u0027ve added this task:\\n\" + x.toString()","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"yyyaohhh"},"content":" + \"\\n\" + tasks.numOfTask() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The number to be deleted... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"yyyaohhh"},"content":" if (tasks.totalTaskNum() \u003d\u003d 0) {","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The list... \" +","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"yyyaohhh"},"content":" \"is already empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"yyyaohhh"},"content":" if (Integer.parseInt(parts[1]) \u003e tasks.totalTaskNum()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! You do not have so many tasks... \" +","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"yyyaohhh"},"content":" \"in the list!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"yyyaohhh"},"content":" int taskNum \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"yyyaohhh"},"content":" tasks.deleteTask(taskNum - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"O...Okk... I\u0027ve re...removed this task:\\n\" + tasks.numOfTask()","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"yyyaohhh"},"content":" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The task to find... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"yyyaohhh"},"content":" String keyword \u003d parts[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"yyyaohhh"},"content":" TaskList store \u003d new TaskList(new ArrayList\u003cTask\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"yyyaohhh"},"content":" for (int i \u003d 0; i \u003c tasks.totalTaskNum(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"yyyaohhh"},"content":" String temp \u003d tasks.printTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"yyyaohhh"},"content":" List\u003cString\u003e words \u003d Arrays.asList(temp.split(\" \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"yyyaohhh"},"content":" if (words.contains(keyword)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"yyyaohhh"},"content":" store.addToList(tasks.tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Here are the matching tasks in your list:\\n\" + store.printList() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! Go...Gomenasaiii!!! I don\u0027t understand!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"yyyaohhh"},"content":" } else { //equals list","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"H...here are the tasks in your list:\\n\" + tasks.printList() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"yyyaohhh"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + e.getMessage() + \"\\n\" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + Ui.sayBye() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yyyaohhh":137}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" * The Duke.Storage class is responsible for reading and writing tasks to/from a file.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" * It provides methods to write a list of tasks to a file and load tasks from a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" protected String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Duke.Storage instance with the specified file path.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" * @param filePath The path to the file where tasks will be stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" * Writes a list of tasks to the file specified in the constructor.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" * @param listOfTasks The list of tasks to be written to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" public void writeToFile(TaskList listOfTasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" for (int i \u003d 0; i \u003c listOfTasks.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" // Check the type of each task and write it to the file with appropriate formatting","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i) instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" Event x \u003d (Event) listOfTasks.tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i).getStatus()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"E | 0 |\" + listOfTasks.printName(i) + \"|\" + x.getStart() + \"-\" + x.getEnd() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"E | 1 |\" + listOfTasks.printName(i) + \"|\" + x.getStart() + \"-\" + x.getEnd() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i) instanceof ToDo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i).getStatus()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"T | 0 |\" + listOfTasks.printName(i) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"T | 1 |\" + listOfTasks.printName(i) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i) instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" Deadline x \u003d (Deadline) listOfTasks.tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i).getStatus()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"D | 0 |\" + listOfTasks.printName(i) + \"| \" + x.getBy() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"D | 1 |\" + listOfTasks.printName(i) + \"| \" + x.getBy() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" * Loads tasks from the file specified in the constructor and returns them as an ArrayList.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" * @return An ArrayList of tasks loaded from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" * @throws FileNotFoundException If the specified file is not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"T \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"yyyaohhh"},"content":" ToDo temp \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"yyyaohhh"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"yyyaohhh"},"content":" if (parts[1].equals(\" 0 \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"yyyaohhh"},"content":" temp.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"D \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"yyyaohhh"},"content":" String[] x \u003d parts[3].split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"yyyaohhh"},"content":" Deadline temp \u003d new Deadline(parts[2], x[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"yyyaohhh"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"yyyaohhh"},"content":" if (parts[1].equals(\" 0 \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"yyyaohhh"},"content":" temp.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"E \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"yyyaohhh"},"content":" String[] duration \u003d parts[3].split(\"-\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"yyyaohhh"},"content":" Event temp \u003d new Event(parts[2], duration[0], duration[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"yyyaohhh"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"yyyaohhh"},"content":" if (parts[1].equals(\" 0 \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"yyyaohhh"},"content":" temp.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"yyyaohhh"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"yyyaohhh":109}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" * The Duke.TaskList class represents a list of tasks and provides various methods for managing and interacting with those tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Duke.TaskList with the provided list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" * @param tasks The list of tasks to initialize the Duke.TaskList with.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" public void addToList(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" * Marks a task as done by its index in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to mark as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" public void markDone(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.get(taskNum).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" * Marks a task as undone by its index in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to mark as undone.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" public void markUndone(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.get(taskNum).markUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" * Returns the string representation of a task by its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to print.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" public String printTask(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" return this.tasks.get(taskNum).toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" * Returns the name of a task by its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to print the name of.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" * @return The name of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" public String printName(int taskNum) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" return this.tasks.get(taskNum).getName();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" * Prints the number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" public String numOfTask() {","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" return \"N... Now you have... \" + this.tasks.size() + \" tasks in the list. o(\u003eω\u003c)o\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" * Deletes a task by its index and prints its details before removal.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to delete.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" public void deleteTask(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(this.printTask(taskNum));","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.remove(taskNum);","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yyyaohhh"},"content":" public int totalTaskNum() {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"yyyaohhh"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"yyyaohhh"},"content":" * Prints the entire list of tasks with numbering for reference.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"yyyaohhh"},"content":" public String printList() {","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"yyyaohhh"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"yyyaohhh"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"yyyaohhh"},"content":" int x \u003d i + 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"yyyaohhh"},"content":" result +\u003d x + \". \" + this.printTask(i) + \"\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"yyyaohhh"},"content":" return result;","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"yyyaohhh":99}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"public class Ui {","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" private static final String DIVIDER \u003d \"___________________________________________________\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" private static final String BYE_MESSAGE \u003d \"B... b...bye bye!... And ... see you! :))\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" private static final String LOGO \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" public Ui() {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" introduction();","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" public String introduction() {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" return DIVIDER + \"Hello from\\n\" + LOGO + \"Ko...ko...ko..nichi...wa!!! I... I am Gotoh... Hitori desu!\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" + \"You... can call me... Bocchi. They usually... call me Bocchi chan...\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" + \"What can... can I do for you?\\n\" + DIVIDER;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" public static String line() {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" return DIVIDER;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" public static String sayBye(){","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" return BYE_MESSAGE;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" return line() + \"The file cannot be loaded!\\n\" + line();","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"yyyaohhh":33}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" public Deadline(String name, LocalDate by) {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" return this.by;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":25}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" * The Event class represents an event, which is a type of task with a name, start date, and end date.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" * It extends the Task class and provides methods to access the event\u0027s start and end dates,","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" * as well as a custom implementation of the toString method to represent the event in a specific format.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" protected String start;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" protected String end;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Event with the specified name, start date, and end date.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" * @param name The name of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" * @param start The start date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" * @param end The end date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" * Gets the start date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" * @return The start date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" public String getStart() {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" return this.start;","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" * Gets the end date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" * @return The end date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" public String getEnd() {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" return this.end;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" * Returns a string representation of the event in the format:","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" * [E][ ] name (from: start date to: end date)","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":54}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" * The Task class represents a basic task with a name and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" * It provides methods for retrieving the task\u0027s name, status, and a custom","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" * string representation of the task, as well as for marking the task as done","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" * or undone.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"public class Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" protected String taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Task with the specified name and sets its initial","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" * completion status to \"not done.\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" * @return An \"X\" if the task is done, or a space if it is not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" public void markDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" * Gets the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" return this.isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" * @return The name of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" public String getName() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" return this.taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" public void markUndone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" * Returns a string representation of the task in the format:","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" * [status] taskName","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":75}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" * The ToDo class represents a task of type \"To-Do\" with a name and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" * It extends the Task class and provides a custom string representation of the task","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" * specific to the \"To-Do\" type.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new ToDo task with the specified name and sets its initial","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" * completion status to \"not done.\"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" * @param name The name of the \"To-Do\" task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" * Returns a string representation of the \"To-Do\" task in the format:","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" * [T] taskName","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the \"To-Do\" task.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":30}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"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-13"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"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-13"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":19}},{"path":"src/test/java/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"public class EventTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" Event test \u003d new Event(\"test123\", \"May 2020\", \"July 2021\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" assertEquals(\"[E][ ] test123 (from: May 2020 to: July 2021)\", test.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"yyyaohhh":13}},{"path":"src/test/java/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" Task test \u003d new Task(\"test123\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" assertEquals(\"[ ] test123\", test.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" public void markDoneTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" Task test \u003d new Task(\"test123\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" test.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" assertEquals(\"[X] test123\", test.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"yyyaohhh":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yyyaohhh":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":"yyyaohhh"},"content":"java -classpath ..\\bin duke.duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-13"},{"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":{"yyyaohhh":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"# duke.duke project template","lastModifiedDate":"2023-09-13"},{"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":"yyyaohhh"},"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-13"},{"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":{"yyyaohhh":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":"yyyaohhh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"javafx {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"java {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" compileJava.options.encoding \u003d \u0027UTF-8\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":"checkstyle {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" mavenCentral()","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":"yyyaohhh"},"content":"test {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" mainClass.set(\"Duke.main.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":77,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yyyaohhh":35,"-":43}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"T | 1 | dne","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"T | 1 | jekj","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"yyyaohhh":2}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"import duke.Main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":12}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"public class Duke {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" //this duke is no longer used.","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" public Duke() {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" this(\"./data/duke.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"File not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" Parser executor \u003d new Parser();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" executor.parse(this.tasks, input);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" new FileWriter(\"./data/duke.txt\", false).close();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" this.storage.writeToFile(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"error: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":"// public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":"// new Duke(\"./data/duke.txt\").run();","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":"// }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yyyaohhh":40,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yyyaohhh":7}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":"// fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":31}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" //private Duke duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" private Ui ui;","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" private Storage storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" private Parser executor;","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gitar.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bocchi.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" this.executor \u003d new Parser();","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" this.storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"File not found\");","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":"// old duke is no longer used","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":"// public void setDuke(Duke d) {","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":"// duke \u003d d;","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":"// this.duke \u003d new Duke();","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":"// }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" new FileWriter(\"./data/duke.txt\", false).close();","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" this.storage.writeToFile(this.tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(\"error: \" + e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" return executor.parse(this.tasks, input);","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":81}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" public String parse(TaskList tasks, String echo) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" while (!echo.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" if (!echo.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" String[] parts \u003d echo.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The number to be marked done... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" int taskNum \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" tasks.markDone(taskNum - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"O...Omedeto! I have... have marked this as done!!ヾ(*´▽‘*)ノ\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" + tasks.printTask(taskNum - 1) + \"\\n\" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The number to be unmarked done... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" int taskNum \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" tasks.markUndone(taskNum - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... this is not done yet ヘ(;´Д`ヘ)\" + tasks.printTask(taskNum - 1)","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" + \"\\n\" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" assert tasks.printTask(taskNum - 1) !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" String removeDdl \u003d echo.replace(\"deadline\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" if (removeDdl.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The description of a deadline... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" String removeBy \u003d removeDdl.replace(\"by\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" String[] ddl \u003d removeBy.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" String[] split \u003d ddl[1].split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" LocalDate by \u003d LocalDate.parse(split[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" Deadline x \u003d new Deadline(ddl[0], by);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" tasks.addToList(x);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... I\u0027ve... I\u0027ve added this task:\\n\" + x.toString() + \"\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" + tasks.numOfTask() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" assert tasks.numOfTask() !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"Th...th...the ddate you have inputed is invalid!!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" String removeEvent \u003d echo.replace(\"event\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" if (removeEvent.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The description of an event... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" String removeFrom \u003d removeEvent.replace(\"from\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" String removeTo \u003d removeFrom.replace(\"to\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" String[] event \u003d removeTo.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" Event x \u003d new Event(event[0], event[1], event[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" tasks.addToList(x);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... I\u0027ve... I\u0027ve added this task:\\n\" + x.toString() + \"\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":" + tasks.numOfTask() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" assert Ui.line() !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":" String removeTodo \u003d echo.replace(\"todo\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"yyyaohhh"},"content":" if (removeTodo.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The description of the todo... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"yyyaohhh"},"content":" ToDo x \u003d new ToDo(removeTodo);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"yyyaohhh"},"content":" tasks.addToList(x);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Okk... I\u0027ve... I\u0027ve added this task:\\n\" + x.toString()","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"yyyaohhh"},"content":" + \"\\n\" + tasks.numOfTask() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The number to be deleted... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"yyyaohhh"},"content":" if (tasks.totalTaskNum() \u003d\u003d 0) {","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The list... \" +","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"yyyaohhh"},"content":" \"is already empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"yyyaohhh"},"content":" if (Integer.parseInt(parts[1]) \u003e tasks.totalTaskNum()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! You do not have so many tasks... \" +","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"yyyaohhh"},"content":" \"in the list!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"yyyaohhh"},"content":" int taskNum \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"yyyaohhh"},"content":" tasks.deleteTask(taskNum - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"O...Okk... I\u0027ve re...removed this task:\\n\" + tasks.numOfTask()","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"yyyaohhh"},"content":" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"yyyaohhh"},"content":" assert tasks.numOfTask() !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"yyyaohhh"},"content":" } else if (parts[0].equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"yyyaohhh"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! The task to find... \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"yyyaohhh"},"content":" \"c...cannot be empty!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"yyyaohhh"},"content":" String keyword \u003d parts[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"yyyaohhh"},"content":" TaskList store \u003d new TaskList(new ArrayList\u003cTask\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"yyyaohhh"},"content":" for (int i \u003d 0; i \u003c tasks.totalTaskNum(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"yyyaohhh"},"content":" String temp \u003d tasks.printTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"yyyaohhh"},"content":" List\u003cString\u003e words \u003d Arrays.asList(temp.split(\" \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"yyyaohhh"},"content":" if (words.contains(keyword)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"yyyaohhh"},"content":" store.addToList(tasks.tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"Here are the matching tasks in your list:\\n\" + store.printList() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"yyyaohhh"},"content":" throw new DukeException(\"AAA...AGHHH!!! Go...Gomenasaiii!!! I don\u0027t understand!!!°(°ˊДˋ°) °\");","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"yyyaohhh"},"content":" } else { //equals list","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + \"H...here are the tasks in your list:\\n\" + tasks.printList() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"yyyaohhh"},"content":" assert tasks.printList() !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"yyyaohhh"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + e.getMessage() + \"\\n\" + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"yyyaohhh"},"content":" assert e.getMessage() !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":137,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"yyyaohhh"},"content":" message \u003d Ui.line() + Ui.sayBye() + Ui.line();","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"yyyaohhh"},"content":" assert Ui.sayBye() !\u003d null;","lastModifiedDate":"2023-09-18"},{"lineNumber":142,"author":{"gitId":"yyyaohhh"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"yyyaohhh":144}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" * The Duke.Storage class is responsible for reading and writing tasks to/from a file.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" * It provides methods to write a list of tasks to a file and load tasks from a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" protected String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Duke.Storage instance with the specified file path.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" * @param filePath The path to the file where tasks will be stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" * Writes a list of tasks to the file specified in the constructor.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" * @param listOfTasks The list of tasks to be written to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" public void writeToFile(TaskList listOfTasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" for (int i \u003d 0; i \u003c listOfTasks.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" // Check the type of each task and write it to the file with appropriate formatting","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i) instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" Event x \u003d (Event) listOfTasks.tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i).getStatus()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"E | 0 |\" + listOfTasks.printName(i) + \"|\" + x.getStart() + \"-\" + x.getEnd() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"E | 1 |\" + listOfTasks.printName(i) + \"|\" + x.getStart() + \"-\" + x.getEnd() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i) instanceof ToDo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i).getStatus()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"T | 0 |\" + listOfTasks.printName(i) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"T | 1 |\" + listOfTasks.printName(i) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i) instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" Deadline x \u003d (Deadline) listOfTasks.tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" if (listOfTasks.tasks.get(i).getStatus()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"D | 0 |\" + listOfTasks.printName(i) + \"| \" + x.getBy() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" fw.write(\"D | 1 |\" + listOfTasks.printName(i) + \"| \" + x.getBy() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" * Loads tasks from the file specified in the constructor and returns them as an ArrayList.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" * @return An ArrayList of tasks loaded from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" * @throws FileNotFoundException If the specified file is not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"T \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"yyyaohhh"},"content":" ToDo temp \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"yyyaohhh"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"yyyaohhh"},"content":" if (parts[1].equals(\" 0 \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"yyyaohhh"},"content":" temp.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"D \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"yyyaohhh"},"content":" String[] x \u003d parts[3].split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"yyyaohhh"},"content":" Deadline temp \u003d new Deadline(parts[2], x[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"yyyaohhh"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"yyyaohhh"},"content":" if (parts[1].equals(\" 0 \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"yyyaohhh"},"content":" temp.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"yyyaohhh"},"content":" if (parts[0].equals(\"E \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"yyyaohhh"},"content":" String[] duration \u003d parts[3].split(\"-\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"yyyaohhh"},"content":" Event temp \u003d new Event(parts[2], duration[0], duration[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"yyyaohhh"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"yyyaohhh"},"content":" if (parts[1].equals(\" 0 \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"yyyaohhh"},"content":" temp.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"yyyaohhh"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"yyyaohhh":109}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" * The Duke.TaskList class represents a list of tasks and provides various methods for managing and interacting with those tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Duke.TaskList with the provided list of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" * @param tasks The list of tasks to initialize the Duke.TaskList with.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" public void addToList(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" * Marks a task as done by its index in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to mark as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" public void markDone(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.get(taskNum).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" * Marks a task as undone by its index in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to mark as undone.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" public void markUndone(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.get(taskNum).markUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" * Returns the string representation of a task by its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to print.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" public String printTask(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" return this.tasks.get(taskNum).toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" * Returns the name of a task by its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to print the name of.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" * @return The name of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":" public String printName(int taskNum) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" return this.tasks.get(taskNum).getName();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" * Prints the number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" public String numOfTask() {","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" return \"N... Now you have... \" + this.tasks.size() + \" tasks in the list. o(\u003eω\u003c)o\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"yyyaohhh"},"content":" * Deletes a task by its index and prints its details before removal.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"yyyaohhh"},"content":" * @param taskNum The index of the task to delete.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"yyyaohhh"},"content":" public void deleteTask(int taskNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yyyaohhh"},"content":" System.out.println(this.printTask(taskNum));","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yyyaohhh"},"content":" this.tasks.remove(taskNum);","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yyyaohhh"},"content":" public int totalTaskNum() {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"yyyaohhh"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"yyyaohhh"},"content":" * Prints the entire list of tasks with numbering for reference.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"yyyaohhh"},"content":" public String printList() {","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"yyyaohhh"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"yyyaohhh"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"yyyaohhh"},"content":" int x \u003d i + 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"yyyaohhh"},"content":" result +\u003d x + \". \" + this.printTask(i) + \"\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"yyyaohhh"},"content":" return result;","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"yyyaohhh":99}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"public class Ui {","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" private static final String DIVIDER \u003d \"___________________________________________________\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" private static final String BYE_MESSAGE \u003d \"B... b...bye bye!... And ... see you! :))\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" private static final String LOGO \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" public Ui() {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" introduction();","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" public String introduction() {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" return DIVIDER + \"Hello from\\n\" + LOGO + \"Ko...ko...ko..nichi...wa!!! I... I am Gotoh... Hitori desu!\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" + \"You... can call me... Bocchi. They usually... call me Bocchi chan...\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" + \"What can... can I do for you?\\n\" + DIVIDER;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" public static String line() {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" return DIVIDER;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" public static String sayBye(){","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" return BYE_MESSAGE;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" return line() + \"The file cannot be loaded!\\n\" + line();","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"yyyaohhh":33}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" public Deadline(String name, LocalDate by) {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" return this.by;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":25}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" * The Event class represents an event, which is a type of task with a name, start date, and end date.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" * It extends the Task class and provides methods to access the event\u0027s start and end dates,","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" * as well as a custom implementation of the toString method to represent the event in a specific format.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" protected String start;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" protected String end;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Event with the specified name, start date, and end date.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" * @param name The name of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" * @param start The start date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" * @param end The end date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" * Gets the start date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" * @return The start date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" public String getStart() {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" return this.start;","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" * Gets the end date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" * @return The end date of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":" public String getEnd() {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" return this.end;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" * Returns a string representation of the event in the format:","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" * [E][ ] name (from: start date to: end date)","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":54}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" * The Task class represents a basic task with a name and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" * It provides methods for retrieving the task\u0027s name, status, and a custom","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" * string representation of the task, as well as for marking the task as done","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" * or undone.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"public class Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" protected String taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new Task with the specified name and sets its initial","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" * completion status to \"not done.\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" * @return An \"X\" if the task is done, or a space if it is not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"yyyaohhh"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"yyyaohhh"},"content":" public void markDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"yyyaohhh"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"yyyaohhh"},"content":" * Gets the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"yyyaohhh"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"yyyaohhh"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"yyyaohhh"},"content":" return this.isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"yyyaohhh"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"yyyaohhh"},"content":" * @return The name of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"yyyaohhh"},"content":" public String getName() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"yyyaohhh"},"content":" return this.taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"yyyaohhh"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"yyyaohhh"},"content":" public void markUndone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"yyyaohhh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"yyyaohhh"},"content":" * Returns a string representation of the task in the format:","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"yyyaohhh"},"content":" * [status] taskName","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"yyyaohhh"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.taskName;","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":75}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":" * The ToDo class represents a task of type \"To-Do\" with a name and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":" * It extends the Task class and provides a custom string representation of the task","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":" * specific to the \"To-Do\" type.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" * Constructs a new ToDo task with the specified name and sets its initial","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" * completion status to \"not done.\"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" * @param name The name of the \"To-Do\" task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" super(name);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"yyyaohhh"},"content":" * Returns a string representation of the \"To-Do\" task in the format:","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"yyyaohhh"},"content":" * [T] taskName","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"yyyaohhh"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"yyyaohhh"},"content":" * @return A string representation of the \"To-Do\" task.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"yyyaohhh"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"yyyaohhh"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"yyyaohhh"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"yyyaohhh"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"yyyaohhh":30}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"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-13"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"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-13"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"yyyaohhh":19}},{"path":"src/test/java/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"public class EventTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" Event test \u003d new Event(\"test123\", \"May 2020\", \"July 2021\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" assertEquals(\"[E][ ] test123 (from: May 2020 to: July 2021)\", test.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"yyyaohhh":13}},{"path":"src/test/java/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"yyyaohhh"},"content":" Task test \u003d new Task(\"test123\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"yyyaohhh"},"content":" assertEquals(\"[ ] test123\", test.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"yyyaohhh"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"yyyaohhh"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"yyyaohhh"},"content":" public void markDoneTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"yyyaohhh"},"content":" Task test \u003d new Task(\"test123\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"yyyaohhh"},"content":" test.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"yyyaohhh"},"content":" assertEquals(\"[X] test123\", test.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"yyyaohhh"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"yyyaohhh"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"yyyaohhh":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yyyaohhh"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yyyaohhh"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yyyaohhh"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yyyaohhh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yyyaohhh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yyyaohhh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yyyaohhh"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yyyaohhh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yyyaohhh"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yyyaohhh":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":"yyyaohhh"},"content":"java -classpath ..\\bin duke.duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-13"},{"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":{"yyyaohhh":1,"-":20}}] diff --git a/yyyaohhh_ip_master/commits.json b/yyyaohhh_ip_master/commits.json index 547692b0..c88c1119 100644 --- a/yyyaohhh_ip_master/commits.json +++ b/yyyaohhh_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yyyaohhh":[{"date":"2023-08-22","commitResults":[{"hash":"fbf82b10c95a6488832c8db1c5d720fc834c9e13","isMergeCommit":false,"messageTitle":"level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"c05c6afb07b60ceeb20aa4db34c75587b627fd8c","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"7b9085ad428081382d9c95dca4b16f17ee9f4b74","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"afe044c9fe359918b43e55083722383ac425ea8f","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":8}}},{"hash":"a1baa23c76cece9edc16247443d5926fb01827c4","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":6}}},{"hash":"8b18fff68c4ee802d18b4f8ad5ae7142816efdaa","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":6,"deletions":0}}},{"hash":"7dc8cf1679cd34f6c0123dbda0b56897477ca21f","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6","Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":48}}}]},{"date":"2023-08-31","commitResults":[{"hash":"140d78c87b738b20f968a08614c2581e0e760c09","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":209,"deletions":79}}}]},{"date":"2023-09-02","commitResults":[{"hash":"eda349bf1367db9324dc91cf86d3f0b085fc2f10","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":13}}},{"hash":"61e5561fc30172458ad4a22b9cb3fdb1f5d32f32","isMergeCommit":false,"messageTitle":"Added A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":226,"deletions":210}}}]},{"date":"2023-09-03","commitResults":[{"hash":"aacb393fba0dba1acfd2257619e10c5198ce44f5","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2d51e51ed80d867bdf29d641d4afc575b0f2b48","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":16,"deletions":4}}},{"hash":"a5d0d55a90c2aa5c42bf1cfdb779311ddc977410","isMergeCommit":false,"messageTitle":"Add A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":49,"deletions":100}}},{"hash":"cca78110cad213fc7f25dc2140abfccca869b957","isMergeCommit":false,"messageTitle":"Add A-JavaDoc","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"f34861fa6b2d64377654e97c600bb45e3dc71983","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"9ca12bb08887998125f7e90d5b090bf4a334c36b","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"34f13f2eac321c029984af6e934b5e1fe0f2a0d5","isMergeCommit":false,"messageTitle":"Add A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":184,"deletions":0}}}]},{"date":"2023-09-10","commitResults":[{"hash":"ec64db3ba6dfb6555b5f35f37083e37363c76cbb","isMergeCommit":false,"messageTitle":"JavaFX Errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":27,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":81,"deletions":27},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"9fedd41cf40fca1464189600856710c95abfa3fe","isMergeCommit":false,"messageTitle":"JavaFX part 4 error","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":267,"deletions":9}}}]},{"date":"2023-09-11","commitResults":[{"hash":"79e08b7114145e6cc0ffb0113381c3f3ecd4c5f1","isMergeCommit":false,"messageTitle":"NullPointerException Error","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":121}}}]},{"date":"2023-09-13","commitResults":[{"hash":"30420840d5c000c17e649ef44fdc8885cff05b5c","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":6},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":125,"deletions":115},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-18","commitResults":[{"hash":"90b567db6bd41cb3c43a3f276658ec78a9949b04","isMergeCommit":false,"messageTitle":"Try to merge and remove the duplicated branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d893c4f4c66acee4f4e87bec65a30eee4b8a6533","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yyyaohhh/GUI","messageBody":"Try to merge and remove the duplicated branch","fileTypesAndContributionMap":{}},{"hash":"04a91c794782794be1013b1ced3f14b4d8e83978","isMergeCommit":false,"messageTitle":"Try to merge and remove the duplicated branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"92018b4f0f8e4c16b820fd3c7a02526de060274f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from yyyaohhh/Level-10","messageBody":"Try to merge and remove the duplicated branch","fileTypesAndContributionMap":{}},{"hash":"b29a9f247ab584a0e2ce0da33a5738622647f67b","isMergeCommit":true,"messageTitle":"Merge pull request #4 from yyyaohhh/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"yyyaohhh":{"java":827,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":35,"txt":11}},"authorContributionVariance":{"yyyaohhh":19741.389},"authorDisplayNameMap":{"yyyaohhh":"CS2103T-T13-1 HUAN..HONG"}} +{"authorDailyContributionsMap":{"yyyaohhh":[{"date":"2023-08-22","commitResults":[{"hash":"fbf82b10c95a6488832c8db1c5d720fc834c9e13","isMergeCommit":false,"messageTitle":"level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"c05c6afb07b60ceeb20aa4db34c75587b627fd8c","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"7b9085ad428081382d9c95dca4b16f17ee9f4b74","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"afe044c9fe359918b43e55083722383ac425ea8f","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":8}}},{"hash":"a1baa23c76cece9edc16247443d5926fb01827c4","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":6}}},{"hash":"8b18fff68c4ee802d18b4f8ad5ae7142816efdaa","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":6,"deletions":0}}},{"hash":"7dc8cf1679cd34f6c0123dbda0b56897477ca21f","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6","Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":48}}}]},{"date":"2023-08-31","commitResults":[{"hash":"140d78c87b738b20f968a08614c2581e0e760c09","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":209,"deletions":79}}}]},{"date":"2023-09-02","commitResults":[{"hash":"eda349bf1367db9324dc91cf86d3f0b085fc2f10","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":13}}},{"hash":"61e5561fc30172458ad4a22b9cb3fdb1f5d32f32","isMergeCommit":false,"messageTitle":"Added A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":226,"deletions":210}}}]},{"date":"2023-09-03","commitResults":[{"hash":"aacb393fba0dba1acfd2257619e10c5198ce44f5","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2d51e51ed80d867bdf29d641d4afc575b0f2b48","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":16,"deletions":4}}},{"hash":"a5d0d55a90c2aa5c42bf1cfdb779311ddc977410","isMergeCommit":false,"messageTitle":"Add A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":49,"deletions":100}}},{"hash":"cca78110cad213fc7f25dc2140abfccca869b957","isMergeCommit":false,"messageTitle":"Add A-JavaDoc","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"f34861fa6b2d64377654e97c600bb45e3dc71983","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"9ca12bb08887998125f7e90d5b090bf4a334c36b","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"34f13f2eac321c029984af6e934b5e1fe0f2a0d5","isMergeCommit":false,"messageTitle":"Add A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":184,"deletions":0}}}]},{"date":"2023-09-10","commitResults":[{"hash":"ec64db3ba6dfb6555b5f35f37083e37363c76cbb","isMergeCommit":false,"messageTitle":"JavaFX Errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":27,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":81,"deletions":27},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"9fedd41cf40fca1464189600856710c95abfa3fe","isMergeCommit":false,"messageTitle":"JavaFX part 4 error","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":267,"deletions":9}}}]},{"date":"2023-09-11","commitResults":[{"hash":"79e08b7114145e6cc0ffb0113381c3f3ecd4c5f1","isMergeCommit":false,"messageTitle":"NullPointerException Error","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":121}}}]},{"date":"2023-09-13","commitResults":[{"hash":"30420840d5c000c17e649ef44fdc8885cff05b5c","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":6},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":125,"deletions":115},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-18","commitResults":[{"hash":"90b567db6bd41cb3c43a3f276658ec78a9949b04","isMergeCommit":false,"messageTitle":"Try to merge and remove the duplicated branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d893c4f4c66acee4f4e87bec65a30eee4b8a6533","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yyyaohhh/GUI","messageBody":"Try to merge and remove the duplicated branch","fileTypesAndContributionMap":{}},{"hash":"04a91c794782794be1013b1ced3f14b4d8e83978","isMergeCommit":false,"messageTitle":"Try to merge and remove the duplicated branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"92018b4f0f8e4c16b820fd3c7a02526de060274f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from yyyaohhh/Level-10","messageBody":"Try to merge and remove the duplicated branch","fileTypesAndContributionMap":{}},{"hash":"b29a9f247ab584a0e2ce0da33a5738622647f67b","isMergeCommit":true,"messageTitle":"Merge pull request #4 from yyyaohhh/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}},{"hash":"0456acbdf1dfad7eb69d0b91746aef25cbcd7d55","isMergeCommit":false,"messageTitle":"Add assert feature","messageBody":"Assert feature is used to document important assumptions that should hold at various points in the code and check for the accuracy of the code.\n\nIt is added it to the Parser class as the class parse and process the input and gives the output, so its accuracy is very important.\n\nLet\u0027s,\n* the asserts checks if the methods returns a null.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"yyyaohhh":{"java":834,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":35,"txt":11}},"authorContributionVariance":{"yyyaohhh":19710.62},"authorDisplayNameMap":{"yyyaohhh":"CS2103T-T13-1 HUAN..HONG"}} diff --git a/zannloo_ip_master/authorship.json b/zannloo_ip_master/authorship.json index ea704109..12bc91b4 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":"zannloo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-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":"zannloo"},"content":" //mainClass.set(\"seedu.duke.Duke\") //check if need change","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" mainClass.set(\"teho.main.TehO\") //new","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"// archiveBaseName \u003d \"duke\"//old","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" archiveBaseName \u003d \"teho\"//new","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zannloo":18,"-":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. The beginning date of event should be before or equal","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" * to the end date of event.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" * @param description Description of task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param fromDate Beginning date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * @param toDate End date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" public Event(String description, LocalDate fromDate, LocalDate toDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" if (fromDate.isAfter(toDate)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" throw new IllegalArgumentException(\"The from date cannot be after the to date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" return \"[E]\" + super.getStatusIcon() + \" \" + this.description","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" + \" (from: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" String digitStatus \u003d this.isDone? \"1\": \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" return \"E|\" + digitStatus + \"|\" + this.description + \"|\"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" + fromDate + \"|\" + toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":56}},{"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":" assert filePath !\u003d null: \"Path of file should not be a null\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" * Saves tasks from taskList into file.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to save the tasks from into the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public static void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" assert taskList !\u003d null: \"taskList should not be a null\";","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-07"},{"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":" fw.write(task.fileString() + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" fw.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" System.out.println(\"☹ OOPS!!! Error when saving task(s).\");","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-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" * Loads tasks from file into a taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" * @return ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" File loadedFile \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(loadedFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" String nextLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" Parser.readLine(nextLine, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" System.out.println(\"☹ OOPS!!! Error when loading task(s).\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":68}},{"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 String getDescription() {","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" return description;","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" public abstract String fileString();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":70}},{"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":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Represents list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" /** List of tasks. */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * Constructs a TaskList instance with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * Returns 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":" * @return Number of tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" * Returns the task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the task to be returned.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" * @return Task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" return this.taskList.get(taskNumber);","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-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * Adds task into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" * @param task Task to be added into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" * Removes task from the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the corresponding task to be removed from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":"public static List\u003cTask\u003e duplicateList(TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" List\u003cTask\u003e duplicatedList \u003d new ArrayList\u003c\u003e(taskList.taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" return duplicatedList;","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":67}},{"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":" static final int TODO_SIZE \u003d 4;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" static final int DEADLINE_SIZE \u003d 8;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" static final int EVENT_SIZE \u003d 5;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" static final int FIND_SIZE \u003d 4;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" * Constructs a TehO instance with string representation of a file path","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" * to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * @param filePath Path of file to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" public TehO(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public String getResponse(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" String returnMessage \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateGoodbyeMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.equals(\"list\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateList(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d markTask(userCommand);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d unmarkTask(userCommand);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addToDo(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addDeadline(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"event\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addEvent(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d delete(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"find\")){","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d find(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"sortAlphabetically\")){","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.sortListAlphabetically(taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" return returnMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" ui.generateHelloMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" storage.loadTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" while (true) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" String userCommand \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" String response \u003d getResponse(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" System.out.println(response);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" * Represents the main method to start TehO.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"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":86,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" new TehO(\"/Users/loomeilinzann/ip/text-ui-test/data/teho.txt\").run();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" * Represents the marking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" public String markTask(String userCommand) {","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" //note that split returns a String[]","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" //parseInt returns the integer value which is represented by the argument","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" task.markAsDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":" return ui.generateMarkTaskMessage(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" * Represents the unmarking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" public String unmarkTask(String userCommand) {","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" task.markAsNotDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" return ui.generateUnmarkTaskMessage(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" * Represents the adding of new ToDo task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new ToDo task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" public String addToDo(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d TODO_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" throw new EmptyToDoDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":" String command \u003d userCommand.substring(TODO_SIZE + 1); //\"todo \"","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-22"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" return ui.generateAddToDoMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" } catch (EmptyToDoDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" * Represents the adding of new Deadline task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Deadline task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":" public String addDeadline(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":146,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d DEADLINE_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"zannloo"},"content":" throw new EmptyDeadlineDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":148,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":149,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(DEADLINE_SIZE + 1); //\"deadline \"","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"zannloo"},"content":" String description \u003d commandWithDate.split(\" /by \")[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(commandWithDate.split(\" /by \")[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"zannloo"},"content":" return ui.generateAddDeadlineMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"zannloo"},"content":" } catch (EmptyDeadlineDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":156,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":158,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":159,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":160,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"zannloo"},"content":" * Represents the addition of new Event task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Event task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"zannloo"},"content":" public String addEvent(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":167,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d EVENT_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"zannloo"},"content":" throw new EmptyEventDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":169,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":170,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(EVENT_SIZE + 1); //\"event \"","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"zannloo"},"content":" String description \u003d commandWithDate.split(\" /from \")[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"zannloo"},"content":" String dates \u003d commandWithDate.split(\" /from \")[1]; //fromDate and toDate","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"zannloo"},"content":" LocalDate fromDate \u003d LocalDate.parse(dates.split(\" /to \")[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"zannloo"},"content":" LocalDate toDate \u003d LocalDate.parse(dates.split(\" /to \")[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"zannloo"},"content":" return ui.generateAddEventMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"zannloo"},"content":" } catch (EmptyEventDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":179,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"zannloo"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"zannloo"},"content":" return \"The from date cannot be after the to date!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":183,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":184,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":185,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"zannloo"},"content":" * Represents the deletion of task from taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be deleted from taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"zannloo"},"content":" public String delete(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-23"},{"lineNumber":192,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"zannloo"},"content":" return ui.generateDeleteMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"zannloo"},"content":" public String find(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":200,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d FIND_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"zannloo"},"content":" throw new EmptyFindDescriptionException();","lastModifiedDate":"2023-08-28"},{"lineNumber":202,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"zannloo"},"content":" String toMatch \u003d userCommand.substring(FIND_SIZE + 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"zannloo"},"content":" return ui.generateFindMessage(toMatch, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"zannloo"},"content":" } catch (EmptyFindDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":210,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":210}},{"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.util.ArrayList;","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"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-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" * @return String representation of hello message","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" public static String generateHelloMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" return \"Hello! I\u0027m TehO \\nWhat can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * Generates goodbye message when user types bye and TehO chatbot exits.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" * @return String representation of bye message.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public static String generateGoodbyeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"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":" * Generates message containing list of tasks.","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 be generated.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks generated.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public static String generateList(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" str +\u003d (i + 1) + \". \" + task.toString() + \"\\n\";;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-05"},{"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":" public static String sortListAlphabetically(TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" List\u003cTask\u003e duplicatedList \u003d taskList.duplicateList(taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" Collections.sort(duplicatedList, (s, t) -\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" return s.getDescription().compareTo(t.getDescription());","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" });","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the tasks in your list in alphabetical order:\\n\";","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c duplicatedList.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" Task task \u003d duplicatedList.get(i);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" str +\u003d (i + 1) + \". \" + task.toString() + \"\\n\";;","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" * @return String representation of marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" public static String generateMarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" * @return String representation of unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" public String generateUnmarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" * Generates message to show that ToDo task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":" * @return String representation of add ToDo task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" public String generateAddToDoMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Deadline task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" * @return String representation of add Deadline task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" public String generateAddDeadlineMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Event task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" * @return String representation of add Event task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" public String generateAddEventMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" * @param task Task deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to delete task from.","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" * @return String representation of delete task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" public String generateDeleteMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" * Generates message to show that there is a loading error.","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" * @return String representation of loading error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" return \"OHNO! Loading error!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":" * Generates message containing list of tasks that matches the user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" * @param toMatch User\u0027s command to be matched with tasks in list.","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to be matched from.","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks that matches user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":" public String generateFindMessage(String toMatch, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"zannloo"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"zannloo"},"content":" String stringTask \u003d task.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"zannloo"},"content":" if (stringTask.contains(toMatch)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"zannloo"},"content":" count++;","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"zannloo"},"content":" str +\u003d count + \". \" + stringTask + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"zannloo"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"zannloo"},"content":" str +\u003d \"There is no matching task:(\";","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":160}},{"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":"D|0|return book|2023-12-14","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"E|1|cook|2023-12-14|2023-12-15","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"T|0|a","lastModifiedDate":"2023-09-11"}],"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}}] +[{"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":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-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":"zannloo"},"content":" //mainClass.set(\"seedu.duke.Duke\") //check if need change","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" mainClass.set(\"teho.main.TehO\") //new","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"// archiveBaseName \u003d \"duke\"//old","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" archiveBaseName \u003d \"teho\"//new","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zannloo":18,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"# TehO\u0027s User Guide","lastModifiedDate":"2023-09-18"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"### Manages tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"Keeps track of user\u0027s tasks and the progress of each task.","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"### Lists tasks","lastModifiedDate":"2023-09-18"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"Lists tasks according to order the tasks was added or alphabetical order. ","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"### About the command format:","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"- Words in `UPPER_CASE` are the parameters to be supplied by the user.","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"- All date inputs should be in the format: `yyyy-MM-dd`","lastModifiedDate":"2023-09-18"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":"- All date outputs will be in the format: `MMM dd yyyy`","lastModifiedDate":"2023-09-18"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":"### `todo` - Adds a todo task into the list","lastModifiedDate":"2023-09-18"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"Format: `todo TASK`","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":"Example of usage: `todo borrow book`","lastModifiedDate":"2023-09-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":"Expected outcome: Adds task into the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-18"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":"Now you have 1 task(s) in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":"### `deadline` - Adds a deadline task into the list","lastModifiedDate":"2023-09-18"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":"Format: `deadline TASK /by DEADLINE`","lastModifiedDate":"2023-09-18"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":"Example of usage: `deadline return book /by 2023-12-14`","lastModifiedDate":"2023-09-18"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":"Expected outcome: Adds task into the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":"[D][ ] return book (by: Dec 14 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":"Now you have 2 task(s) in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":"### `event` - Adds a event task into the list","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":"Format: `event TASK /from START_DATE /to END_DATE`","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":"Example of usage: `event book fair /from 2023-12-14 /to 2023-12-15`","lastModifiedDate":"2023-09-18"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":"Expected outcome: Adds task into the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":"[E][ ] book fair (from: Dec 14 2023 to: Dec 15 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"Now you have 3 task(s) in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":"### `mark` - Marks a task in the list as done","lastModifiedDate":"2023-09-18"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":"Format: `mark TASK_NUMBER`","lastModifiedDate":"2023-09-18"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":"Example of usage: `mark 1`","lastModifiedDate":"2023-09-18"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":"Expected outcome: Marks the first task in list as done.","lastModifiedDate":"2023-09-18"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":"Good job! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-18"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":"[T][X] borrow book","lastModifiedDate":"2023-09-18"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":"### `unmark` - Unmarks a task in the list as undone","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":"Format: `unmark TASK_NUMBER`","lastModifiedDate":"2023-09-18"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":"Example of usage: `unmark 1`","lastModifiedDate":"2023-09-18"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":"Expected outcome: Unmarks the first task in list as udone.","lastModifiedDate":"2023-09-18"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":"Okay, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-09-18"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-18"},{"lineNumber":78,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":"### `delete` - Deletes a task in the list","lastModifiedDate":"2023-09-18"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":"Format: `delete TASK_NUMBER`","lastModifiedDate":"2023-09-18"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":"Example of usage: `delete 1`","lastModifiedDate":"2023-09-18"},{"lineNumber":85,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":86,"author":{"gitId":"zannloo"},"content":"Expected outcome: Deletes the first task in list.","lastModifiedDate":"2023-09-18"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-18"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-18"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":"Now you have 2 task(s) in the list.","lastModifiedDate":"2023-09-18"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":"### `find` - Finds task(s) in the list","lastModifiedDate":"2023-09-18"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":"Format: `find TASK_DESCRIPTION`","lastModifiedDate":"2023-09-18"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":"Example of usage: `find book`","lastModifiedDate":"2023-09-18"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":"Expected outcome: Generates list of all tasks matching the task description.","lastModifiedDate":"2023-09-18"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":"Here are the matching task(s) in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":"[D][ ] return book (by: Dec 14 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":"[E][ ] book fair (from: Dec 14 2023 to: Dec 15 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":"### `list` - Lists task(s) in the list","lastModifiedDate":"2023-09-18"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":"Format: `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":"Example of usage: `list`","lastModifiedDate":"2023-09-18"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":"Expected outcome: Generates list of all tasks.","lastModifiedDate":"2023-09-18"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":"Here are the task(s) in your list:","lastModifiedDate":"2023-09-18"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":"1.[D][ ] return book (by: Dec 14 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":"2.[E][ ] book fair (from: Dec 14 2023 to: Dec 15 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":"### `sortAlphabetically` - Lists task(s) in the list in alphabetical order","lastModifiedDate":"2023-09-18"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":"Format: `sortAlphabetically`","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":"Example of usage: `sortAlphabetically`","lastModifiedDate":"2023-09-18"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":"Expected outcome: Generates list of all tasks in alphabetical order.","lastModifiedDate":"2023-09-18"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":"Here are the tasks in your list in alphabetical order:","lastModifiedDate":"2023-09-18"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":"1.[E][ ] book fair (from: Dec 14 2023 to: Dec 15 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":"2.[D][ ] return book (by: Dec 14 2023)","lastModifiedDate":"2023-09-18"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":"```","lastModifiedDate":"2023-09-18"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":"### `bye` - Exits the program","lastModifiedDate":"2023-09-18"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-18"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":"Format: `bye`","lastModifiedDate":"2023-09-18"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":"Example of usage: `bye`","lastModifiedDate":"2023-09-18"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":"Expected outcome: TehO generates a goodbye message. ","lastModifiedDate":"2023-09-18"},{"lineNumber":138,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":"Bye! Have a great day \u0026 see you again soon:)","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"zannloo":120,"-":20}},{"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 \"Ohno! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-09-18"},{"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 \"Ohno! The description of a event cannot be empty.\";","lastModifiedDate":"2023-09-18"},{"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":" /**","lastModifiedDate":"2023-09-18"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-09-18"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" return \"Ohno! You have not listed what you want to find.\";","lastModifiedDate":"2023-09-18"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":13}},{"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 \"Ohno! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-09-18"},{"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 \"Ohno! I\u0027m sorry, but I don\u0027t know what that means :(\";","lastModifiedDate":"2023-09-18"},{"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 \"Ohno! There\u0027s something is wrong with TehO!\";","lastModifiedDate":"2023-09-18"},{"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":"//Reused from https://se-education.org/guides/tutorials/javaFx.html","lastModifiedDate":"2023-09-18"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"// with minor modifications","lastModifiedDate":"2023-09-18"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" }","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":" * 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":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" public static DialogBox getTehODialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":62}},{"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. The beginning date of event should be before or equal","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" * to the end date of event.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" * @param description Description of task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param fromDate Beginning date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * @param toDate End date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" public Event(String description, LocalDate fromDate, LocalDate toDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" if (fromDate.isAfter(toDate)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" throw new IllegalArgumentException(\"The from date cannot be after the to date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" return \"[E]\" + super.getStatusIcon() + \" \" + this.description","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" + \" (from: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" String digitStatus \u003d this.isDone? \"1\": \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" return \"E|\" + digitStatus + \"|\" + this.description + \"|\"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" + fromDate + \"|\" + toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":56}},{"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":"//Reused from https://se-education.org/guides/tutorials/javaFx.html","lastModifiedDate":"2023-09-18"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"// with minor modifications","lastModifiedDate":"2023-09-18"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":13}},{"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":"//Reused from https://se-education.org/guides/tutorials/javaFx.html","lastModifiedDate":"2023-09-18"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"// with minor modifications","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" private TehO tehO \u003d new TehO(\"/Users/loomeilinzann/ip/text-ui-test/data/teho.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setTehO(tehO);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":34}},{"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":"//Reused from https://se-education.org/guides/tutorials/javaFx.html","lastModifiedDate":"2023-09-18"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"// with minor modifications","lastModifiedDate":"2023-09-18"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" //@FXML annotation marks a private or protected member and","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" // makes it accessible to FXMLdespite its modifier.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" // Without the annotation, we will have to make everything","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" // public and expose our UI to unwanted changes.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" private TehO tehO;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" private Image userImage \u003d new Image(this.getClass()","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" .getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" private Image tehOImage \u003d new Image(this.getClass()","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" .getResourceAsStream(\"/images/tehO.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" String helloMessage \u003d \"Hello! I\u0027m TehO \\nWhat could I do for you today?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" dialogContainer.getChildren().add(DialogBox.getTehODialog(helloMessage, tehOImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" public void setTehO(TehO t) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" tehO \u003d t;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" }","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":" * Creates two dialog boxes, one echoing user input and the other containing","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" * Duke\u0027s reply and then appends them to the dialog container.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" * Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" private void handleUserInput() throws InvalidCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" String response \u003d tehO.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" DialogBox.getTehODialog(response, tehOImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" //clear input field","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":67}},{"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":" assert filePath !\u003d null: \"Path of file should not be a null\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" * Saves tasks from taskList into file.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to save the tasks from into the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public static void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" assert taskList !\u003d null: \"taskList should not be a null\";","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-07"},{"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":" fw.write(task.fileString() + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" fw.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Ohno! Error when saving task(s).\");","lastModifiedDate":"2023-09-18"},{"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-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" * Loads tasks from file into a taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" * @return ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" File loadedFile \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(loadedFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" String nextLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" Parser.readLine(nextLine, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Ohno! Error when loading task(s).\");","lastModifiedDate":"2023-09-18"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":68}},{"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-09-18"},{"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-09-18"},{"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 String getDescription() {","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" return description;","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" public abstract String fileString();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":70}},{"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":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Represents list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" /** List of tasks. */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * Constructs a TaskList instance with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * Returns 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":" * @return Number of tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" * Returns the task with the corresponding taskNumber.","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the task to be returned.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" * @return Task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" return this.taskList.get(taskNumber);","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-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * Adds task into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" * @param task Task to be added into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" * Removes task from the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the corresponding task to be removed from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" public static List\u003cTask\u003e duplicateList(TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" List\u003cTask\u003e duplicatedList \u003d new ArrayList\u003c\u003e(taskList.taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" return duplicatedList;","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":67}},{"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":" static final int TODO_SIZE \u003d 4;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" static final int DEADLINE_SIZE \u003d 8;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" static final int EVENT_SIZE \u003d 5;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" static final int FIND_SIZE \u003d 4;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" * Constructs a TehO instance with string representation of a file path","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" * to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * @param filePath Path of file to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" public TehO(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public String getResponse(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" String returnMessage \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateGoodbyeMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.equals(\"list\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateList(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d markTask(userCommand);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d unmarkTask(userCommand);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addToDo(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addDeadline(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"event\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addEvent(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d delete(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"find\")){","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d find(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"sortAlphabetically\")){","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.sortListAlphabetically(taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" return returnMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" ui.generateHelloMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" storage.loadTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" while (true) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" String userCommand \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" String response \u003d getResponse(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" System.out.println(response);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" * Represents the main method to start TehO.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"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":86,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" new TehO(\"/Users/loomeilinzann/ip/text-ui-test/data/teho.txt\").run();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" * Represents the marking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" public String markTask(String userCommand) {","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" //note that split returns a String[]","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" //parseInt returns the integer value which is represented by the argument","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" task.markAsDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":" return ui.generateMarkTaskMessage(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" * Represents the unmarking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" public String unmarkTask(String userCommand) {","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-18"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" task.markAsNotDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" return ui.generateUnmarkTaskMessage(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" * Represents the addition of new ToDo task into taskList according to user\u0027s command.","lastModifiedDate":"2023-09-18"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new ToDo task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" public String addToDo(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d TODO_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" throw new EmptyToDoDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":" String command \u003d userCommand.substring(TODO_SIZE + 1); //\"todo \"","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-22"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" return ui.generateAddToDoMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" } catch (EmptyToDoDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" * Represents the addition of new Deadline task into taskList according to user\u0027s command.","lastModifiedDate":"2023-09-18"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Deadline task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":" public String addDeadline(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":146,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d DEADLINE_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"zannloo"},"content":" throw new EmptyDeadlineDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":148,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":149,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(DEADLINE_SIZE + 1); //\"deadline \"","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"zannloo"},"content":" String description \u003d commandWithDate.split(\" /by \")[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(commandWithDate.split(\" /by \")[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"zannloo"},"content":" return ui.generateAddDeadlineMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"zannloo"},"content":" } catch (EmptyDeadlineDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":156,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":158,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":159,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":160,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"zannloo"},"content":" * Represents the addition of new Event task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Event task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"zannloo"},"content":" public String addEvent(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":167,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d EVENT_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"zannloo"},"content":" throw new EmptyEventDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":169,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":170,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(EVENT_SIZE + 1); //\"event \"","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"zannloo"},"content":" String description \u003d commandWithDate.split(\" /from \")[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"zannloo"},"content":" String dates \u003d commandWithDate.split(\" /from \")[1];","lastModifiedDate":"2023-09-18"},{"lineNumber":173,"author":{"gitId":"zannloo"},"content":" LocalDate fromDate \u003d LocalDate.parse(dates.split(\" /to \")[0]);","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"zannloo"},"content":" LocalDate toDate \u003d LocalDate.parse(dates.split(\" /to \")[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"zannloo"},"content":" return ui.generateAddEventMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"zannloo"},"content":" } catch (EmptyEventDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":179,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"zannloo"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"zannloo"},"content":" return \"The from date cannot be after the to date!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":183,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":184,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":185,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"zannloo"},"content":" * Represents the deletion of task from taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be deleted from taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"zannloo"},"content":" public String delete(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-18"},{"lineNumber":192,"author":{"gitId":"zannloo"},"content":" assert taskNumber \u003e\u003d 0 : \"taskNumber should not be negative\";","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"zannloo"},"content":" return ui.generateDeleteMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"zannloo"},"content":" public String find(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":200,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c\u003d FIND_SIZE) {","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"zannloo"},"content":" throw new EmptyFindDescriptionException();","lastModifiedDate":"2023-08-28"},{"lineNumber":202,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"zannloo"},"content":" String toMatch \u003d userCommand.substring(FIND_SIZE + 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"zannloo"},"content":" return ui.generateFindMessage(toMatch, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"zannloo"},"content":" } catch (EmptyFindDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":210,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":210}},{"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.util.Comparator;","lastModifiedDate":"2023-09-18"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"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-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" * @return String representation of hello message","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" public static String generateHelloMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" return \"Hello! I\u0027m TehO \\nWhat can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * Generates goodbye message when user types bye and TehO chatbot exits.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" * @return String representation of bye message.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public static String generateGoodbyeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" return \"Bye!\\nHave a great day \u0026 see you again soon:)\";","lastModifiedDate":"2023-09-18"},{"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":" * Generates message containing list of tasks.","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 be generated.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks generated.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public static String generateList(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the task(s) in your list:\\n\";","lastModifiedDate":"2023-09-18"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" str +\u003d (i + 1) + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-18"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-05"},{"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-09-18"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" * Generates message containing list of tasks in alphabetical order.","lastModifiedDate":"2023-09-18"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-18"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to be generated in alphabetical order.","lastModifiedDate":"2023-09-18"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks generated in alphabetical order.","lastModifiedDate":"2023-09-18"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-18"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" public static String sortListAlphabetically(TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" List\u003cTask\u003e duplicatedList \u003d taskList.duplicateList(taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" //Solution inspired by https://www.baeldung.com/java-8-comparator-comparing","lastModifiedDate":"2023-09-18"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" Collections.sort(duplicatedList, Comparator.comparing(Task::getDescription));","lastModifiedDate":"2023-09-18"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the tasks in your list in alphabetical order:\\n\";","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c duplicatedList.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" Task task \u003d duplicatedList.get(i);","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" str +\u003d (i + 1) + \". \" + task.toString() + \"\\n\";;","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" * @return String representation of marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" public static String generateMarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" return \"Good job! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-18"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" * @return String representation of unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" public String generateUnmarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" return \"Okay, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-18"},{"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 ToDo 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":" * @return String representation of add ToDo task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" public String generateAddToDoMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Deadline task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" * @return String representation of add Deadline task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" public String generateAddDeadlineMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Event task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" * @return String representation of add Event task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" public String generateAddEventMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" * @param task Task deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to delete task from.","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" * @return String representation of delete task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":" public String generateDeleteMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" * Generates message to show that there is a loading error.","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":" * @return String representation of loading error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" return \"Ohno! Loading error!\";","lastModifiedDate":"2023-09-18"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" * Generates message containing list of tasks that matches the user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":" * @param toMatch User\u0027s command to be matched with tasks in list.","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to be matched from.","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks that matches user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"zannloo"},"content":" public String generateFindMessage(String toMatch, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the matching task(s) in your list:\\n\";","lastModifiedDate":"2023-09-18"},{"lineNumber":151,"author":{"gitId":"zannloo"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"zannloo"},"content":" String stringTask \u003d task.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"zannloo"},"content":" if (stringTask.contains(toMatch)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"zannloo"},"content":" count++;","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"zannloo"},"content":" str +\u003d count + \". \" + stringTask + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"zannloo"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"zannloo"},"content":" str +\u003d \"There is no matching task:(\";","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":165}},{"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/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 b0e2f3cb..19b0df9a 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}}}]},{"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}}}]},{"date":"2023-09-07","commitResults":[{"hash":"17e658ce05f96bedbd7f9352a8a99de1b86530df","isMergeCommit":false,"messageTitle":"Edits","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":5,"deletions":6}}}]},{"date":"2023-09-10","commitResults":[{"hash":"61d2e818d549f4679dbe4fa58de0ca291bc8a4c1","isMergeCommit":false,"messageTitle":"Generate a new JAR file using Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"652fd276fbdb60776dde9cbba1dc55cc759a0555","isMergeCommit":false,"messageTitle":"Update assertions","messageBody":"Include assertions in Storage constructor, saveTask method in the Storage class to verify that filePath and taskList are not null.\nInclude assertion in remove method in the TaskList class to verify that taskNumber is not negative.\nInclude assertions in markTask, unmarkTask and delete methods in TehO class to verify that taskNumber is not negative .\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"543583e1f899df515bc1b106a10960b848b6693b","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Having fixed sizes for todo, deadline, event and find to avoid magic numbers which improves readability.\nSimplifying returnMessage to improves readability.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":37,"deletions":27}}}]},{"date":"2023-09-11","commitResults":[{"hash":"c258ba033cadbe088a40a7adc4e1c92701705a4d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from zannloo/branch-A-Assertions","messageBody":"Update assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"22a1f101e4f82e6f90e0fe93a329d4039ff4e9b0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"* master:\n Update assertions\n\n# Conflicts:\n#\tsrc/main/java/teho/main/TehO.java\n","fileTypesAndContributionMap":{}},{"hash":"319d3703b48564aa903cf02958a69e91a19b6189","isMergeCommit":true,"messageTitle":"Merge pull request #1 from zannloo/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"b1e0940efb24f34cb38c1b34da3a68ad5a87a36f","isMergeCommit":false,"messageTitle":"Edits","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d245c816676e7614b74f50ed3e7b19519895a117","isMergeCommit":false,"messageTitle":"Add sort tasks alphabetically feature","messageBody":"Currently, there is no feature to sort tasks in alphabetical order.\n\nSorting tasks according to alphabetical order can enhance visibility for the user.\n\nIt is done through a method sortListAlphabetically so that it is in the same command format as the other commands.\n\nIt is done this way so that users can easily learn how to use the command.\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":30,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"zannloo":{"java":1064,"md":0,"fxml":35,"sh":2,"bat":1,"gradle":18,"txt":5}},"authorContributionVariance":{"zannloo":41344.008},"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}}}]},{"date":"2023-09-07","commitResults":[{"hash":"17e658ce05f96bedbd7f9352a8a99de1b86530df","isMergeCommit":false,"messageTitle":"Edits","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":5,"deletions":6}}}]},{"date":"2023-09-10","commitResults":[{"hash":"61d2e818d549f4679dbe4fa58de0ca291bc8a4c1","isMergeCommit":false,"messageTitle":"Generate a new JAR file using Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"652fd276fbdb60776dde9cbba1dc55cc759a0555","isMergeCommit":false,"messageTitle":"Update assertions","messageBody":"Include assertions in Storage constructor, saveTask method in the Storage class to verify that filePath and taskList are not null.\nInclude assertion in remove method in the TaskList class to verify that taskNumber is not negative.\nInclude assertions in markTask, unmarkTask and delete methods in TehO class to verify that taskNumber is not negative .\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"543583e1f899df515bc1b106a10960b848b6693b","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Having fixed sizes for todo, deadline, event and find to avoid magic numbers which improves readability.\nSimplifying returnMessage to improves readability.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":37,"deletions":27}}}]},{"date":"2023-09-11","commitResults":[{"hash":"c258ba033cadbe088a40a7adc4e1c92701705a4d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from zannloo/branch-A-Assertions","messageBody":"Update assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"22a1f101e4f82e6f90e0fe93a329d4039ff4e9b0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"* master:\n Update assertions\n\n# Conflicts:\n#\tsrc/main/java/teho/main/TehO.java\n","fileTypesAndContributionMap":{}},{"hash":"319d3703b48564aa903cf02958a69e91a19b6189","isMergeCommit":true,"messageTitle":"Merge pull request #1 from zannloo/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"b1e0940efb24f34cb38c1b34da3a68ad5a87a36f","isMergeCommit":false,"messageTitle":"Edits","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d245c816676e7614b74f50ed3e7b19519895a117","isMergeCommit":false,"messageTitle":"Add sort tasks alphabetically feature","messageBody":"Currently, there is no feature to sort tasks in alphabetical order.\n\nSorting tasks according to alphabetical order can enhance visibility for the user.\n\nIt is done through a method sortListAlphabetically so that it is in the same command format as the other commands.\n\nIt is done this way so that users can easily learn how to use the command.\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":30,"deletions":8}}}]},{"date":"2023-09-18","commitResults":[{"hash":"b0ac7d04a7b76c9ba34933e234e858db03b95620","isMergeCommit":false,"messageTitle":"Edits","messageBody":"Change some phrases used by TehO chatbot for the personality touch.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":41,"deletions":31}}},{"hash":"08e200148e030a32b2d3f3d8e5bf4a68613c4bd3","isMergeCommit":false,"messageTitle":"Gives credit for reused work","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"196fcdb01b731c803f0b4c229352d19df5a1e2a7","isMergeCommit":false,"messageTitle":"Updates for UserGuide","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"md":{"insertions":122,"deletions":12}}},{"hash":"e6d757f0686ee2e2363ace8171e97d41ca2b9e94","isMergeCommit":false,"messageTitle":"Edits for the UserGuide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"zannloo":{"java":1082,"md":120,"fxml":35,"sh":2,"bat":1,"gradle":18,"txt":2}},"authorContributionVariance":{"zannloo":34469.984},"authorDisplayNameMap":{"zannloo":"CS2103T-W15-2 LOO ..ZANN"}}

kC=BtLBL`cEvlu)YMfowzz~B+d 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